LntCode_二叉树的排序方法

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

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

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

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

LntCode_二叉树的排序方法_第1张图片


1、中序排序方法:

(1)、非递归算法:

    public ArrayList inorderTraversal(TreeNode root) {
        // write your code here
        
        //用于保存中序遍历的结果
        ArrayList res=new ArrayList();
        //用于返回上一层二叉树
        ArrayList p=new ArrayList();
        
        //如果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 preorderTraversal(TreeNode root) {

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

        //如果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;
    }


你可能感兴趣的:(学习日志)