卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

Java 二叉树遍历(先序、中序、后序)的实现

二叉树1、二叉树是什么
二叉树是由n个结点构成的有限集合,n=0时为空树,n>0时为非空树。

非空树:
有且仅有一个根结点;
除根结点外的其余结点又可分为两个不相交的子集Left 和Right ,分别称为此二叉树的左子树和右子树,且Left 和Right 本身又都是二叉树

2、二叉树的遍历
先序遍历  --  根左右
中序遍历  --  左根右
后序遍历  --  根左右

3、代码实现

public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
}
 
public class Solution {
    /**
     * 
     * [url=home.php?mod=space&uid=952169]@Param[/url] root TreeNode类 the root of binary tree
     * [url=home.php?mod=space&uid=155549]@Return[/url] int整型二维数组
     */
    public int[][] threeOrders (TreeNode root) {
        // write code here
        //创建三个集合,分别用来存放先序、中序、后序
        List<Integer> front =new ArrayList<>();
        List<Integer> middle =new ArrayList<>();
        List<Integer> back = new ArrayList<>();
 
        preOrder (root,front);
        inOrder  (root,middle);
        postOrder(root,back);
        System.out.println(front);
        System.out.println(middle);
        System.out.println(back);
 
        //使用二维数组来接收
        int [][] res =new int [3][front.size()];
        for(int i = 0; i<front.size();i++){
            res[0][i] = front.get(i);
            res[1][i] = middle.get(i);
            res[2][i] = back.get(i);
        }
        //结果返回二维数组形式
        return res;
 
    }
 
    //先序遍历 -- 根 左 右
    public void preOrder(TreeNode root ,List<Integer> list){
        if(root == null){
            return ;
        }
        //先放根节点
        list.add(root.val);
        //递归把左节点的值放入list
        preOrder(root.left,list);
        //递归把右节点的值放入list
        preOrder(root.right,list);
    }
 
    //中序遍历 -- 左 根 右
    public void inOrder(TreeNode root ,List<Integer> list){
        if(root ==null){
            return;
        }
        //先放左节点
        inOrder(root.left,list);
        //根节点
        list.add(root.val);
        //右节点
        inOrder(root.right,list);
    }
    //后序遍历 -- 左 右 根
    public void postOrder(TreeNode root ,List<Integer> list){
        if(root ==null){
            return;
        }
        //先放左节点
        postOrder(root.left,list);
        //右节点
        postOrder(root.right,list);
        //根节点
        list.add(root.val);
         
    }
 
}
卓越飞翔博客
上一篇: java - 求能兑换几瓶汽水
下一篇: Golang 对 刚刚 几个小时前 几分钟前 几天前的时间处理
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏