Java 从BST中的任何节点查找根

Java 从BST中的任何节点查找根,java,algorithm,data-structures,binary-search-tree,treenode,Java,Algorithm,Data Structures,Binary Search Tree,Treenode,如何从任何给定节点查找二叉搜索树的根?更具体地说,当我从任何给定节点遍历祖先时,应该在什么时候停止?java中是否有获取根目录的函数?请帮帮我。我假设您正在用Java或其他语言编写自己的BST实现?如果节点存储对父节点的引用,最终在爬树时将遇到父节点为null的节点。此节点通常应为根节点 如果您的节点没有存储这样的引用,那么如果您只有一个节点,就无法访问根节点。许多实现缺少对父节点的引用,因为它节省了内存,并且可以在遍历树(对于深度优先遍历)时使用堆栈来处理 但我不清楚你到底想做什么。为什么需要

如何从任何给定节点查找二叉搜索树的根?更具体地说,当我从任何给定节点遍历祖先时,应该在什么时候停止?java中是否有获取根目录的函数?请帮帮我。

我假设您正在用Java或其他语言编写自己的BST实现?如果节点存储对父节点的引用,最终在爬树时将遇到父节点为null的节点。此节点通常应为根节点

如果您的节点没有存储这样的引用,那么如果您只有一个节点,就无法访问根节点。许多实现缺少对父节点的引用,因为它节省了内存,并且可以在遍历树(对于深度优先遍历)时使用堆栈来处理


但我不清楚你到底想做什么。为什么需要查找根节点?

这里是java中的二叉树节点表示

class Node{
    int data;
    Node leftChild;
    Node rightChild;
}
但是,如果我们遵循这种节点表示,那么就很难从叶节点遍历到它们的祖先。这种表示法适合于在问题语句中同时给出对根节点的引用的问题

为了从树中任何位置的节点开始遍历,我们必须在节点类中放置对父节点的引用

class Node{
    int data;
    Node parent;
    Node leftChild;
    Node rightChild;
}
现在,如果您开始遍历,那么当您找到一个节点的空父节点时必须停止

/* the logic for traversing */
Node tempRoot = given node;
while(true){
    if(null != tempRoot.parent){
        tempRoot = tempRoot.parent;

    }else{
        break;
    }
}
/* return value of tempRoot: this is your root */

[编辑:我省略了getter和setter。虽然我不建议这样实现:)

如果您已经实现了自己的BST,那么您应该有一个数据成员
节点根
在您的BST类中,您可以通过从BST类的任何方法访问该数据成员来访问/查找根