Java 给定最小值和最大值的二叉树递归遍历
问题(必须是递归的): 编写一个函数,该函数取二叉树的根以及一个最小值和最大值,并查找树中介于这些值之间的所有节点,同时尽可能少地访问其他节点Java 给定最小值和最大值的二叉树递归遍历,java,recursion,binary-tree,traversal,Java,Recursion,Binary Tree,Traversal,问题(必须是递归的): 编写一个函数,该函数取二叉树的根以及一个最小值和最大值,并查找树中介于这些值之间的所有节点,同时尽可能少地访问其他节点 public boolean inRange(Node node, int max, int min) { return root.element() < max && root.elemnt() > min; } public void inRangeFinder(Node root, int max, int mi
public boolean inRange(Node node, int max, int min)
{
return root.element() < max && root.elemnt() > min;
}
public void inRangeFinder(Node root, int max, int min)
{
if (root == null) return; //break
if(inRange(root, max, min))
visit(root); //mark as found
finder(root.leftChild());
finder(root.rightChild());
}
public boolean inRange(节点节点,int max,int min)
{
返回root.element()min;
}
RangeFinder中的公共void(节点根、int max、int min)
{
if(root==null)返回;//中断
if(范围(根、最大值、最小值))
访问(根);//标记为已找到
finder(root.leftChild());
finder(root.rightChild());
}
我的问题是,第一个陈述是否必要?它会导致我的左右子树遍历出现问题吗?最重要的是,这是访问量最少的方法吗?更新:对不起,我不知道您的程序是用java编写的。我不是java用户,所以答案可能不正确。请原谅 是的,第一个if语句是必需的。如果你取消了If 语句时,您的程序在访问 空指针 这基本上是左手边第一个dfs搜索,所以它访问 每个节点只有一次。如果树没有组织,则使用此方法 花费尽可能少的访问。但是如果树是有组织的树, 您必须重新定义方法,以适应特定的树类型 获得最少的访问 为了递归,应该定义函数名 始终如一
public void finder(Node root, int max, int min)
//^^^^^ be the same with your recursive call
{
if (root == null) return; //break
if(inRange(root, max, min))
visit(root); //mark as found
finder(root.leftChild(),max,min);
//^^same arguments
finder(root.rightChild(),max,min);
//^^
}
如果你有一棵树,它是以简单的方式组织的,那么你就不必做If语句 这实际上取决于您的树实现 顺序树的伪代码
-find value with min key.
-travers in order
- and check if result of
in order traversal result meets max condition
在我看来,你甚至不必检查特定的范围
范例
5
4 8
2 6 9
3
顺序意味着只使用左时间叶遍历每个节点
所以要在范围内找到一个特定的区域。实现顺序查找
然后对最小值执行它。并且只要您的实现
查找最大值的顺序值
但是,请尝试保存此过程的结果,以获得您想要的序列
希望能有点帮助当然有必要。你还要怎么处理树叶?在询问之前,您没有用一些测试用例来测试您的代码吗?