第六章 二叉树part01

本文介绍了二叉树的基本概念,包括度、树高、节点类型(如满二叉树、完全二叉树和二叉搜索树),以及深度优先搜索(前序、中序、后序)和广度优先搜索的原理与Java实现。作者通过实例展示了如何使用递归遍历二叉树结构。
摘要由CSDN通过智能技术生成

二叉树理论基础

专业名词

度:每个节点的数量(最多2)

树高:总层数

根节点:最顶上的

左子树、右子树。左节点、右节点。

种类

满二叉树:全满

完全二叉树:除了底层全满,底层要从左到右连续

二叉搜索树:左边的所有节点都小于中间节点

平衡二叉搜索树:左子树和右子树相差不能大于1

遍历

1.深度优先搜索

一条道走到黑(竖着走)

方法:栈/递归(递归法、迭代法)

顺序

描述【中】所在的位置

1.前序:中左右
2.中序:左中右
3.后序:左右中

2.广度优先搜索

按层遍历(横着走)/或一圈一圈遍历

方法:队列

二叉树实现代码

public class TreeNode{
    int val;//存储数值
    TreeNode leftNode;
    TreeNode rightNode;
    //构造方法
    public TreeNode(){}
    public TreeNode(int val){
        this.val=val;
    }
    public TreeNode(int val,TreeNode leftNode,TreeNode rightNode){
        this.val=val;
        this.leftNode=leftNode;
        this.rightNode=rightNode;
    }
}

二叉树的递归遍历

递归三要素

1.确定递归的参数返回值

2.确定终止条件

3.确定单层递归逻辑

前序代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer>res=new ArrayList<>();
    preorder(root,res);
        return res;
    }
    public void preorder(TreeNode root,List res){
        if(root==null){return;}
        res.add(root.val);
        preorder(root.left,res);
        preorder(root.right,res);

    }
}

后序

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
 List<Integer>res=new ArrayList<>();
postorder(root,res);
return res;
    }
    public void postorder(TreeNode root,List res){
        if(root==null)return;
        postorder(root.left,res);
        postorder(root.right,res);
        res.add(root.val);
    }
}

中序

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        inorder(root,res);
        return res;
    }
    public void inorder(TreeNode root,List res){
        if(root==null)return;
        inorder(root.left,res);
        res.add(root.val);
        inorder(root.right,res);
    }
}

总结

学习了两个小时,初步了解了二叉树的基础知识和遍历操作。

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值