栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

leetcode 94 二叉树的中序遍历

Java 更新时间:发布时间: 百科书网 趣学号

理解中序遍历关键在于左---根---右的顺序,

也就是说递归访问左子树,到null为止

然后递归栈弹出

在这个时候访问节点就会满足 左根右的顺序

其他的几种遍历,比如前序遍历 根左右

实际也一样,这时候就要先访问根节点,然后递归左,再递归右。

ArrayList res = new ArrayList<> ();
    public void addData(TreeNode root){
        //如果是个空树;直接返回[]
        if(root == null)
            return;
        // 按照左根右的顺序

        addData (root.left);
        //代码执行到这里的时候,就说明左子树已经遍历完了;
        res.add (root.val);
        addData (root.right);
    }
    public List inorderTraversal(TreeNode root) {
        addData(root);
       return res;

    }

还有一种是非递归遍历

实际是用栈模拟了递归

ArrayList res = new ArrayList<> ();

public List inorderTraversal(TreeNode root) {
        Stack stree = new Stack<> ();
        if (root == null) {
            return res;
        }
        //确保遍历已经结束的两个条件
        //一个是当前节点是空节点,还有就是栈空
       //如果当前节点是空节点,但是栈不空,说明节点还没遍历完
       //如果当前节点不为空,但是栈空,,说明节点没入栈
       //两个条件都要满足 
        while (root != null ||!stree.isEmpty ()){
            
            //先遍历左节点  
            while (root != null) {
                stree.push (root);
                root = root.left;
            }
             //左节点遍历结束
            TreeNode topNode = stree.pop ();
            res.add (topNode.val);
            //再看右节点    
            root = root.right;
        }
        return res;

    }

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1072768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号