吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1815|回复: 10
收起左侧

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

[复制链接]
dxxbjl 发表于 2023-3-30 18:47
本帖最后由 dxxbjl 于 2023-4-22 21:52 编辑

二叉树1、二叉树是什么

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


非空树:

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


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



3、代码实现


[Java] 纯文本查看 复制代码
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);
        
    }

}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shodow123 发表于 2023-3-30 21:39
后序遍历是左右根吧。。。

点评

都一样,重点是根在最后  详情 回复 发表于 2023-3-30 23:41
gngn39 发表于 2023-3-30 23:08
gngn39 发表于 2023-3-30 23:16
先左后右的顺序不变,根节点在遍历顺序中的位置是区分遍历方式的关键。先根后左右叫做先序遍历;根在左右中间遍历叫做中序遍历;根在最后遍历叫做后序遍历。
侃遍天下无二人 发表于 2023-3-30 23:41
shodow123 发表于 2023-3-30 21:39
后序遍历是左右根吧。。。

都一样,重点是根在最后
repaircat 发表于 2023-3-31 08:18
昨天刚学的二叉树,理论是懂了,代码不懂
seawaycao 发表于 2023-3-31 08:18
学习了,感谢分享
yypisco 发表于 2023-4-13 19:21
二叉树的遍历每次都是当时懂下次忘
starkcccc 发表于 2023-4-20 13:56
再来一个非递归遍历,统一一个模板就好了
cxp 发表于 2023-12-11 21:48
请问这是C语言吗?感觉和学校里学的不太一样,我似乎也没看见主函数,可能是我学的太菜了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-3 03:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表