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因为每个节点只有一个直接父节点,所以您描述的树结构会很奇怪。