该部分内容主要对递归方式实现树的前中后序遍历进行总结,三种方式的递归实现方式代码量小,思维量大,重点应该放在递归方式如何进行的,怎么画出递归调用图,为黄金挑战笔记打好铺垫!
1.前、中、后序遍历模板
前中后序遍历过程无非是根节点的访问顺序,访问左子树和访问右子树的功能都能通过递归的方式实现,因此逻辑易懂,直接上三种方式的模板代码!
public static void preOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
res.add(root.val);
preOrder(root.left, res);
preOrder(root.right, res);
}
public static void inOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
inOrder(root.left, res);
res.add(root.val);
inOrder(root.right, res);
}
public static void postOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
postOrder(root.left, res);
postOrder(root.right, res);
res.add(root.val);
}
2.前、中、后序遍历的递归调用图
以中序遍历的递归调用图为例,递归调用出口是当前树节点为空,否则在函数栈中保存现在参数、局部变量和返回值地址,进行下一个子树的调用过程,当左子树全部递归调用结束,当前函数栈栈顶保留了根节点的参数、局部变量和返回值地址,因此会访问根节点,在进入根节点的右子树进行递归。
仔细看上面的递归调用图,标清箭头序号,就掌握了前中后序的递归调用原理,也将顺利攻克前中后序遍历的迭代实现方式(因为其本质就是模拟递归调用过程)!
OK,《算法通关村第七关——树前/中/后序遍历白银挑战笔记》结束,喜欢的朋友三联加关注!关注鱼市带给你不一样的算法小感悟!(幻听)
再次,感谢鱼骨头教官的学习路线!鱼皮的宣传!小y的陪伴!ok,拜拜,第七关第三幕见!