如何从任何给定节点找到二叉搜索树的根?更具体地说,从任何给定节点遍历祖先时,我应该什么时候停止?java中有没有获取root的函数?请帮我。
3 回答
这是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。虽然我不建议这样实现:)]
我假设您正在用 Java 或其他方式编写自己的 BST 实现?如果节点存储了对父节点的引用,最终您将在爬上树时遇到父节点为 null 的节点。这个节点通常应该是根。
如果您的节点没有存储此类引用,那么如果您只有一个节点,则无法到达根目录。许多实现缺少对父节点的引用,因为它可以节省内存并且可以在遍历树时使用堆栈来处理(用于深度优先遍历)。
但我不清楚你到底想做什么。为什么需要找到根节点?
If you have implemented your own BST, then you should have a data member Node root;
in your BST class, you can access/find the root by simply accessing that data member from any method of BST class