已经有相当长一段时间没有写博客了,搞后端框架和学习技术组件实在是身心俱疲
今天简单复习一下中序遍历好了
其实这是个很经典的代码模板,可以当成母模块在其他进阶版的题目中用到
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while(root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);
root = root.left;
}
root = stack.pop();
result.add(root.val);
root = root.right;
}
return result;
}
}
中序遍历的简单顺序模型是:左孩子 ---> 父节点 ---> 右孩子
可以设置一个循环条件:当root != null 或者 栈不空时
这样我们可以一路遍历到最左下角,压入栈中,然后弹出栈顶结点,此时该弹出节点为父节点身份,并将值放入list中,再寻找该节点的右节点;若没有右节点,则从栈中弹出获取,即取二叉树中就是从父节点。
注意:我们一直向左孩子遍历时,注定循环结束后没有左孩子,那这时候“最左孩子”的身份就变成了父节点,要先检测该父节点是否有右节点,如若没有,才能向上遍历,如若有,需要先把右孩子压入栈中。
(要先尽好责任做好父母,照料好自己的孩子,自己才有资格作为孩子身份面向父母)