目录
1 递归实现
1.1 思路
底层是由栈实现,若根节点非空,先打印根节点,之后递归到根节点的左孩子节点...当遇到null节点时,返回;此时第6行代码执行完毕,进入第7行代码,注意此时递归后的节点,访问到当前节点的右孩子节点又进入递归~刚开始理解递归有些难,但这要自己慢慢琢磨、摸索代码~
1.2 代码
void binaryTreePrevOrder1(TreeNode root){
if (root == null){
return;
}
System.out.print(root.value+" ");
binaryTreePrevOrder1(root.left);
binaryTreePrevOrder1(root.right);
}
2 非递归实现
2.1 思路
底层用栈实现,定义一个节点指向根节点,当根节点不为空的时候将其入栈,并将其打印,该节点指向左孩子节点,直到将所有的左孩子节点都入栈,取出栈顶节点,将栈顶节点的右孩子入栈并打印,依次这样下去就完成了前序遍历~
2.2 代码
void binaryTreePrevOrderNonR(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()){
while (cur != null){
stack.push(cur);
System.out.print(cur.value+" ");
cur = cur.left;
}
cur = stack.pop().right;
}
}