树的遍历
前序
递归
1 | /** |
非递归
1 | /** |
中序
递归
1 | /** |
非递归
1 | class Solution { |
后序
递归
1 | /** |
非递归
Using one stack.
后序要保证一个节点要在左孩子和右孩子之后才能访问,那么有下面三种情况:
1.它是叶子节点,没有左右孩子。可以直接访问。
2.它有左右孩子,但是左右孩子都已经被访问过,也可以直接访问该节点。
3.有左右孩子,且左右孩子没有访问过。此时要先入栈右孩子,再入栈左孩子。
精简一下的话,因为后序遍历是左右根,如果一个节点被访问,一定是:1)右孩子为空;2)右孩子是上一个访问的节点。
1 | class Solution { |
Using two stacks.
1 | class Solution { |
层序
分层输出
递归
1 | /** |
非递归
分层输出
1 | /** |
整体输出
非递归
1 | class Solution{ |
Solution
一般情况下,都可以用递归方法解决–树本身的定义就是递归定义。
- 终止条件
- 递进的过程
- 回归的过程
一般情况是 递进->终止条件->回归。