迭代法(五行代码 )
先序
思想
一直走到左子树的尽头,边走边遍历当前节点的值,走到尽头后转向父节点的右子树,,重复刚刚的过程
参考代码
中序遍历
思想
和先序遍历差不多,但是要走到尽头后在开始访问值
参考代码
后序遍历
思想
因为后序遍历 :左右根(可以由 ‘根右左’ 翻转得到,而 ‘根右左’ 与先序遍历的 "根左右" 代码微调即可)
参考代码
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root; //当前节点
while(!stack.isEmpty() || cur != null){
while(cur != null){// 一直往右走
res.add(cur.val);
stack.push(cur);
cur = cur.right;
}
//当走到空,即当前节点的父节点没有右子树,则转向父节点的左子树,然后重复
TreeNode node = stack.pop();
cur = node.left;
}
Collections.reverse(res);//翻转列表
return res;
}
}