二叉树的遍历(前序遍历,后序遍历,中序遍历,层序遍历)

二叉树

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点。
二叉树
代码实现:
先创建一个树

class BinaryTree {
    private HeroNode root;
    public void setRoot(HeroNode root) {
        this.root = root;
    }
 }

再创建树上的每个节点

class HeroNode{
    private int no;
    private String name;
    //该树的左子节点
    private HeroNode left;
    //该数的右子节点
    private HeroNode right;
    //给出该树的构造器
    public HeroNode(int no,String name){
        this.no = no;
        this.name = name;
    }
    public int getNo(){
        return no;
    }
    public void setNo(int no){
        this.no = no;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public HeroNode getLeft(){
        return left;
    }
    public void setLeft(HeroNode left){
        this.left = left;
    }

    public HeroNode getRight() {
        return right;
    }

    public void setRight(HeroNode right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }
  }

前序遍历

思路:前序遍历的顺序是先看根节点,再去找左子树进行递归,最后再找右子树进行递归
代码实现:

//前序遍历的方法(父节点+左节点+右节点)
    public void preOrder(){
        //先输出父节点
        System.out.println(this);
        //进行递归左子树前序遍历
        if(this.left != null){
            this.left.preOrder();
        }
        //进行递归右子树前序遍历
        if(this.right != null){
            this.right.preOrder();
        }
    }

中序遍历

思路:中序遍历的顺序是先看左子树进行递归,再看根节点,再看右子树进行递归

//中序遍历(左节点+父节点+右节点)
    public void infixOrder(){
        //进行递归左子树中序遍历
        if(this.left != null){
            this.left.infixOrder();
        }
        //输出父节点
        System.out.println(this);
        //进行递归右子树中序遍历
        if(this.right != null){
            this.right.infixOrder();
        }
    }

后序遍历

思路:后序遍历是先去看左子树,再看右子树,最后看根节点。

    //后序遍历(左节点+右节点+父节点)
    public void postOrder(){
        //进行递归左子树中序遍历
        if(this.left != null){
            this.left.postOrder();
        }
        //进行递归右子树中序遍历
        if(this.right != null){
            this.right.postOrder();
        }
        //输出父节点
        System.out.println(this);
    }

(扩展)层序遍历LeetCode102

这里直接上代码: 层序遍历

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //先创建1个队列来表示每层的TreeNode
        Queue<TreeNode> queue = new LinkedList<>();
        //统计所有层数的集合
        List<List<Integer>> arr = new ArrayList<List<Integer>>();
        if(root == null){
            return new ArrayList<>();
        }
        //先将根节点root加进去
        queue.add(root);
        //只要当前的队列不为null
        while(!queue.isEmpty()){
            //获取当前层的个数
            int size = queue.size();
          //先new1个ArrayList来接收
           List<Integer> list = new ArrayList<>();
           //遍历当前层
            for(int i = 0;i<size;i++){
                //将当前的节点取出
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.add(node.left);
                }
                if(node.right != null){
                    queue.add(node.right);
                }
            }
            arr.add(list);
        }
        return arr;
    }
}

总结

二叉树的前序遍历,后序遍历,中序遍历的前中后指的就是根节点遍历的位置不一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲键盘的程序源

你的激励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值