LntCode_二叉树的排序方法

来源:互联网 发布:网络瓶颈有哪些 编辑:程序博客网 时间:2024/05/20 07:59

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

(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;    }


0 0
原创粉丝点击