Java 如何使用递归找到二叉树的某个节点?
如何编写代码来查找某个节点。具体地说,我如何说在检查节点后访问了它Java 如何使用递归找到二叉树的某个节点?,java,Java,如何编写代码来查找某个节点。具体地说,我如何说在检查节点后访问了它 public Iterator<T> pathToRoot(T targetElement, BinaryTreeNode<T> current) throws ElementNotFoundException { Stack<BinaryTreeNode<T>> myStack = new Stack<>();
public Iterator<T> pathToRoot(T targetElement, BinaryTreeNode<T> current)
throws ElementNotFoundException
{
Stack<BinaryTreeNode<T>> myStack = new Stack<>();
if (current == null)
return null;
if (current.element.equals(targetElement)) //found it
{
myStack.push(current); //adds the current element to the stack
}
// mark as visited
//mark node also as found
// return the found element
if (current.hasLeftChild() || current.hasRightChild()) //if the current node has a left or right child
{
// mark node as visited
}
if (current.hasLeftChild())//if the current node has a left child node
pathToRoot(targetElement, current.getLeft()); // check the left child node
if (current.hasRightChild())//same thing as above but for the right
pathToRoot(targetElement, current.getRight());
if(current != targetElement && /*node has been visited*/)
myStack.pop(); // pop node from the stack
return myStack.toString(); //return string of path to root
}
公共迭代器路径根(T targetElement,二进制树节点当前)
抛出ElementNotFoundException
{
Stack myStack=新堆栈();
如果(当前==null)
返回null;
if(current.element.equals(targetElement))//找到了它
{
myStack.push(当前);//将当前元素添加到堆栈中
}
//标记为已访问
//将节点标记为已找到
//返回找到的元素
if(current.hasLeftChild()| | current.hasRightChild())//如果当前节点具有左或右子节点
{
//将节点标记为已访问
}
if(current.hasLeftChild())//如果当前节点具有左子节点
PathtRoot(targetElement,current.getLeft());//检查左侧子节点
if(current.hasRightChild())//与上面相同,但用于右侧
pathToRoot(targetElement,current.getRight());
如果(当前!=targetElement&/*节点已被访问*/)
myStack.pop();//从堆栈中弹出节点
return myStack.toString();//返回根目录的路径字符串
}
/使用dfs搜索查找节点/将图形节点标记为已访问的唯一目的是确保不会进入无限循环,因为图形可能包含一个循环 二叉树是一种特殊的图,它不包含循环,因此在进行遍历时不需要将节点标记为已访问 此外,通常二叉树的排序方式是,当前节点包含值X,其左子树包含值小于X的节点,其右子树包含值大于X的节点。这允许进行需要对数时间的搜索,在演示的代码中,您似乎没有利用这一点
因此,我认为您对二叉树的工作原理没有很好的了解,在实现此功能之前,您应该进行更多的研究。树不能包含循环,您不需要检查您是否访问了某个对象。公平地说,如果每个节点都不知道它的父节点,您需要跟踪访问了哪些节点。但再一次,修复下面的结构要比解决这个问题容易得多way@HarisNadeem因为每个节点只有一个直接父节点,所以您描述的树结构会很奇怪。