我正在编写一个程序来遍历二叉搜索树。这是我的代码:
主.java
public class Main {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
binaryTree.add(50);
binaryTree.add(40);
binaryTree.add(39);
binaryTree.add(42);
binaryTree.add(41);
binaryTree.add(43);
binaryTree.add(55);
binaryTree.add(65);
binaryTree.add(60);
binaryTree.inOrderTraversal(binaryTree.root);
}
}
节点.java
public class Node {
int data;
Node left;
Node right;
Node parent;
public Node(int d)
{
data = d;
left = null;
right = null;
}
}
二叉树.java
public class BinaryTree {
Node root = null;
public void add(int d)
{
Node newNode = new Node(d);
if(root!=null)
{
Node futureParent = root;
while(true)
{
if(newNode.data < futureParent.data) //going left
{
if(futureParent.left == null)
{
futureParent.left = newNode;
newNode.parent = futureParent;
break;
}
futureParent = futureParent.left;
}
else
{
if(futureParent.right == null)
{
futureParent.right = newNode;
newNode.parent = futureParent;
break;
}
futureParent = futureParent.right;
}
}
}
else
{
root = newNode;
}
}
public void inOrderTraversal(Node node)
{
if(node!=null)
{
inOrderTraversal(node.left);
System.out.println(node.data);
inOrderTraversal(node.right);
}
}
}
我完全理解加法过程,但我无法理解遍历。现在,为了更好地参考,我正在使用的树是这样的:
函数中的第一条语句inOrderTraversal()
访问 50,40 然后 39 并最终命中 null 使 if 条件为 false 之后打印 39 并搜索右孩子。在此之后第一条语句停止执行并且堆栈展开第二个和第三个导致打印 40 并遍历到 41 的语句(inOrderTraversal(node.right)
和),这是我不明白的部分,即一旦堆栈中有新的东西,编译器停止执行后如何重新启动语句 1()。print(node.data)
inOrderTraversal(node.left)