从BST中的任何节点查找根

时间:2013-06-16 12:11:43

标签: java algorithm data-structures binary-search-tree treenode

如何从任何给定节点中找到二叉搜索树的根?更具体地说,我何时应该从任何给定节点通过祖先时停止? java中是否有任何函数可以获取root权限?请帮帮我。

3 个答案:

答案 0 :(得分:3)

这是java

中的二叉树节点表示
class Node{
    int data;
    Node leftChild;
    Node rightChild;
}

但是,如果我们遵循这种节点表示,那么很难从叶节点遍历到它们的祖先。这种表示适用于根据问题陈述给出对根节点的引用的问题。

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

class Node{
    int data;
    Node parent;
    Node leftChild;
    Node rightChild;
}

现在,如果您开始遍历,则必须在找到节点的 null parent 时停止。

/* 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。虽然我不打算像这样实施:)]

答案 1 :(得分:1)

我假设您正在用Java编写自己的BST实现或者其中某些行?如果节点存储对父节点的引用,那么在攀爬树时,最终会遇到父节点为null的节点。该节点通常应该是根节点。

如果您的节点不存储此类引用,则如果您拥有的只是单个节点,则无法访问根目录。许多实现缺少对父节点的引用,因为它节省了内存,并且可以在遍历树时使用堆栈来处理(用于深度优先遍历)。

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

答案 2 :(得分:1)

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