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