陈越-数据结构-二叉树笔记(上)

本文详细介绍了二叉树的性质,包括层序最大节点数、深度与节点总数的关系以及叶节点与度为2节点的数量关系。接着探讨了二叉树的存储结构,如顺序存储和链式存储,特别指出链式存储在二叉树中的优势。此外,文章还详述了二叉树的遍历方法,包括递归和非递归实现的前序、中序和后序遍历,以及遍历在实际应用中的价值。最后提到了树的同构概念。
摘要由CSDN通过智能技术生成

一、二叉树的性质

  1. 一个二叉树第i层的最大结点数为:2i-1, i>=1。
  2. 深度为K的二叉树有最大结点总数:2k-1, k>=1。
  3. 叶结点个数n0 和度为2的非叶结点个数n2 的关系为:n0=n2 +1。

二、二叉树的存储结构

1. 顺序存储结构(数组)
在这里插入图片描述
一般二叉树虽然也可以通过补齐为完全二叉树来使用这种结构,但会造成大量空间浪费,所以通常采用链式存储。

2. 链表存储
定义一个二叉树

 struct TreeNode {
   
     int data;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : data(x), left(NULL), right(NULL) {
   } //构造函数
 };

在这里插入图片描述

三、二叉树的遍历

二叉树的遍历分为前序、中序、后序和层次遍历

1. 递归实现

//中序
void InorderTraversal( TreeNode* BT )
{
   
    if( BT ) {
   
        InorderTraversal( BT->Left );
        /* 此处假设对BT结点的访问就是打印数据 */
        printf("%d ", BT->Data); /* 假设数据为整型 */
        InorderTraversal( BT->Right );
    }
}
//前序
void PreorderTraversal( TreeNode* BT )
{
   
    if( BT ) {
   
        printf("%d ", BT->Data );
        PreorderTraversal( BT->Left );
        PreorderTraversal( BT->Right );
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值