首页 > 代码库 > 在二叉查找树中查找不小于某个值的最小数值

在二叉查找树中查找不小于某个值的最小数值

给定一颗二叉查找树,给定一个值value,求该二叉查找树中不小于某个值value的最小数值。

思考:二叉查找树的特征就是左子节点比父节点值小,右子节点比父节点值大。在获得该二叉查找树根节点的情况下,想要得到该二叉查找树中不小于某个值得最小数值,分以下几点考虑:

1.如果currentNode.getData() == value , 则currentNode节点即为所求节点。

2.如果currentNode.getData() < value , 则当前节点的左子树所有节点的值均小于value, 所

以不需要在左子树中考虑,将搜索范围缩小在右子树中查找。

3.如果currentNode.getData() > value , 则将搜索范围缩小在当前节点和其左子树中查找。更细点讲,如果当前节点的左子树中最大节点值小于value,那么当前节点即为所求,如果当前节点的左子树中最大节点值不小于value,那么将搜索范围缩小在左子树中。

所以,我们采用递归来实现。

节点类:

public class Node {	int data;	Node left;	Node right;	public Node(){}	public Node(int data)	{		this.data=http://www.mamicode.com/data;>

  搜索树类:

public class SearchTree {	Node root;		public Node createTree()    {		Scanner scan=new Scanner(System.in);   		int number=scan.nextInt();		if(number==0)		{			return null;		}		Node node=new Node(number); 		node.setLeft(createTree());		node.setRight(createTree());				root=node;		return node;    }		public Node findTree(Node root, int value)	{		if(root==null)		{			return null;		}		Node iter=root;		if(iter.data<value)		{			return findTree(iter.right,value);		}		else if(iter.data=http://www.mamicode.com/=value)>

  测试类:

public class Test {	public static void main(String [] args)	{		SearchTree searchTree=new SearchTree();		Node root=searchTree.createTree();		//System.out.println("success");		int value=http://www.mamicode.com/98;">="+value+":  "+searchTree.findTree(root, value).getData());				value=http://www.mamicode.com/99;">="+value+":  "+searchTree.findTree(root, value).getData());				value=http://www.mamicode.com/106;">="+value+":  "+searchTree.findTree(root, value).getData());				value=http://www.mamicode.com/108;">="+value+":  "+searchTree.findTree(root, value).getData());			    value=http://www.mamicode.com/115;">="+value+":  "+searchTree.findTree(root, value).getData());	}}

输入:100 90 70 60 0 0 85 0 0 95 92 0 0 98 0 0 110 105 0 107 0 0 125 0 0

测试结果: