写在前面,前序遍历问题能用三种算法实现,分别为递归版、迭代版1、迭代版2,其中的差异和细节值得好好体会。
题目:前序遍历
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
1 | 输入:root = [1,null,2,3] |
示例 2:
1 | 输入:root = [] |
示例 3:
1 | 输入:root = [1] |
示例 4:
1 | 输入:root = [1,2] |
示例 5:
1 | 输入:root = [1,null,2] |
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
题解1(递归版)
1 | /** |
题解2(迭代版1)
思想:利用栈来替代递归的函数调用
1 | /** |
题解3(迭代版2)
先序遍历的宏观过程:自顶向下的依次访问左侧链上的沿途节点,再倒过来,自底向上地依次遍历各个层次上的每一颗右子树
1 | /** |