LntCode_二叉树的排序方法

本文详细介绍了二叉树的三种主要遍历方法:前序、中序和后序遍历,并提供了非递归算法的具体实现。重点展示了如何通过算法实现中序和前序遍历的过程。

二叉树的排序方法主要有下图三种:

(1)、前序序列:根节点->左子树->右子树

(2)、中序序列:左子树->根节点->右子树

(3)、后序序列:左子树->右子树->根节点


1、中序排序方法:

(1)、非递归算法:

    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        // write your code here
        
        //用于保存中序遍历的结果
        ArrayList<Integer> res=new ArrayList<Integer>();
        //用于返回上一层二叉树
        ArrayList<TreeNode> p=new ArrayList<TreeNode>();
        
        //如果root不为空或者p中还有元素
        while(root!=null||p.size()!=0){
            
            //如果root不为空,将root添加至p中,且root置为左子树;
            while(root!=null){
                p.add(root);
                root=root.left;
            }
            
            //已经遍历到二叉树最左边的结点了,root.left=null,则将root加入res中,且遍历root的右子树
            root=p.get(p.size()-1);
            res.add(root.val);
            p.remove(p.get(p.size()-1));
            root=root.right;

        }
        return res;
    }


2、前序排序方法:

    //前序排列
    public ArrayList<Integer> preorderTraversal(TreeNode root) {

        //用于保存中序遍历的结果
        ArrayList<Integer> res=new ArrayList<Integer>();
        //用于返回上一层二叉树
        ArrayList<TreeNode> p=new ArrayList<TreeNode>();

        //如果root不为空或者p中还有元素,且将root添加到res中
        while(root!=null||p.size()!=0){
            
            //如果root不为空,将root添加至p中,且root置为左子树;
            //res.add(root.val)语句的位置,是中序和前序的唯一区别
            while(root!=null){
                p.add(root);
                res.add(root.val);
                root=root.left;
            }
            
            //已经遍历到二叉树最左边的结点了,root.left=null,则遍历root的右子树
            root=p.get(p.size()-1);
            p.remove(p.get(p.size()-1));
            root=root.right;
        }
        return res;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值