目录
当时年少掷春光,花马踏蹄酒渐香
—— 24.10.20
前中后序遍历非递归实现
三种遍历虽然打印的顺序不一样,但是其在树中每个节点的访问路径相同
1.前序
我们使用一个栈来辅助实现。首先将根节点入栈。在每次循环中,取出栈顶节点并输出其值。然后先将右子节点入栈(如果存在),再将左子节点入栈(如果存在)。这样就保证了先访问根节点,然后是左子树,最后是右子树。
因为栈是先进后出的数据结构,所以先入栈的左子节点会在右子节点之后被处理,从而实现了前序遍历(根左右)的顺序。
// 前序遍历(根左右)
public static void preOrderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val + " ");
if (node.right!= null) {
stack.push(node.right);
}