如何从任何给定节点中找到二叉搜索树的根?更具体地说,我何时应该从任何给定节点通过祖先时停止? java中是否有任何函数可以获取root权限?请帮帮我。
答案 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类的任何方法访问该数据成员来访问/查找根