我有一个二叉树,每个节点上都有一个单词。
在另一个类中,我需要逐个访问节点,然后操作单词。从另一个类逐个访问节点的最佳方法是什么?
在我的币树类中,每个节点都有一个左子、右子和一个值(String)。我有三个方法,printinorder-,插入和find节点。查找节点接收一个字符串,并查看该字符串是否存储在任何节点值中。
public void printInOrder(Node node) {
if (node != null) {
printInOrder(node.left);
System.out.println(node.value);
printInOrder(node.right);
}
我有另一个类,需要一个接一个地获取节点,但是我不确定从另一个类中获取的最佳方式是什么。我可以从类内部遍历树,但不能从不同的类遍历。
假设你有一个树类,先写一个遍历树的方法(广度/深度搜索)。在遍历的每个节点上,假设您的节点是某种类型的对象,在它的一个变量中保存一个单词,访问该节点并更改存储的单词。基本上,在你的二叉树类中编写函数,让你这样做,并在你的其他类中调用它们。
看templatetypedef的回答,这是更高效的方法。我所介绍的方法的优点是,它不需要对现有的节点类进行任何修改,并且使用与PrintInOrder相同的模式。它只依赖于节点类的公共属性,所以应该可以从一个单独的类中使用。
public List<Node> nodes GetAllNodes(Node root) {
List<Node> nodes = new ArrayList<Node>();
if (root != null) {
nodes.addAll(GetAllNodes(root.left));
nodes.add(root);
nodes.addAll(GetAllNodes(root.right));
}
return nodes;
}
我没有编译或测试这个,所以可能有错误。
遍历二叉树中所有节点的一种方法是执行以下操作,这将启动最左侧的节点并重复迁移到当前节点的顺序后继节点:
>
首先尽可能向左走,不要从树上掉下来。这是您的第一个节点。
要从一个节点转到下一个应该访问的节点,请执行以下操作:
这最终在所有节点上只花费O(n)时间,因此这是一种在节点之间迁移的非常快速的方法。
为了实现这一点,您要么需要让每个节点存储一个父指针,要么必须维护一个从起始节点到当前节点的节点路径堆栈。然而,对于合理平衡的树,这比填充树中的整个节点列表并返回它更节省空间。
希望这有帮助!
这总是使只有一个out的循环: 为了返回二叉树的正确高度,您还有其他想法(或想法如何更改此代码)吗? len是树中所有节点的数目,self。Queue是具有方法高度的类的子类。
在“二叉树”中,一个外部节点是一个没有任何子节点的节点,无论是左的还是右的,如果我错了,请纠正我-在“二叉树”中,一个外部节点总是空的,因为根据我的课堂讲稿,一个内部节点总是有两个子节点,即使没有创建,但我们假设该内部节点的子节点是空的。那么,如果外部节点为空,我如何访问它呢? 我将这段代码作为BST节点类的一部分编写: Last方法给我nullPointerException
我是在一次采访中被问到这个问题的。 问题:给出了一个二叉树和相应子树的高度。然后我们必须按顺序找到一个特定位置的元素。 例如:树结构为:D(根节点)[subtree-size=6]-->B,F(D的子节点)[subtree-size=2]-->A,C,E,G(叶节点)[subtree-size=0]。 因此共有3个级别:级别0:D;1级:B级、F级;2级:A、C、E、G 我们必须在inorder中
假设我有一个简单的二叉树节点类,如下所示: 如何添加一个能够递归遍历任何大小的树的方法,从左到右访问每个现有节点,而无需重新访问已遍历的节点? 这行得通吗?
class Node(object): def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node