94. 二叉树的中序遍历

已经有相当长一段时间没有写博客了,搞后端框架和学习技术组件实在是身心俱疲

今天简单复习一下中序遍历好了

其实这是个很经典的代码模板,可以当成母模块在其他进阶版的题目中用到

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中,再寻找该节点的右节点;若没有右节点,则从栈中弹出获取,即取二叉树中就是从父节点。

注意:我们一直向左孩子遍历时,注定循环结束后没有左孩子,那这时候“最左孩子”的身份就变成了父节点,要先检测该父节点是否有右节点,如若没有,才能向上遍历,如若有,需要先把右孩子压入栈中。

(要先尽好责任做好父母,照料好自己的孩子,自己才有资格作为孩子身份面向父母)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值