当前位置:   article > 正文

【数据结构】 二叉树的链式结构_二叉树左右链接是什么

二叉树左右链接是什么

1. 二叉树的概念及结构

概念
1.可以是空树
2.当不是空树时,由根节点+根节点的左子树+根节点的右子树组成(根节点的左右子树也是二叉树)
特点
1.每个结点最多有两棵树
2.左右子树不能颠倒(必须是有序的)
结构(5种情况)
在这里插入图片描述
特殊二叉树-----满二叉树和完全二叉树(主要看图理解下)
满二叉树:每层都达到最大值,K层,每层的结点数都是2^(k-1) 满二叉数也是特殊的完全二叉树哦
完全二叉树:有右孩子必须有左孩子(下图2文字写反了)

在这里插入图片描述

2. 二叉树的存储结构

分两种:顺序结构、链式结构

顺序存储:典型的就是堆(完全二叉树),就是使用数组来存储,一般只适合表示完全二叉树(不是完全二叉树会有空间浪费)所以二叉树的顺序存储在物理上是一个数组,在逻辑上是一颗二叉树

链式存储
就是用链表来表示一颗二叉树,通常的方法是孩子表示法(二叉链)孩子双亲表示法(三叉链),这里主要讲二叉链,也就是孩子表示法,三叉链在红黑树部分再提(PS:二叉链和三叉链都是面试期间常考的)
链表中每个结点由三个域组成,数据域和左右指针域,左右指针域是左右孩子所在的链结点的存储地址,到这是不是就想到递归了,看图理解下
在这里插入图片描述

3. 二叉链式结构的实现

创建结点:结点的左右子树都是结点

typedef int BTDataType;
typedef struct BinTreeNode
{
   
 struct BinTreeNode* left;
 struct BinTreeNode* right;
 BTDataType val;
}BTNode;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.1三种顺序的递归遍历(前、中、后)

遍历就是沿着某条搜索路径,树种每个结点只访问一次(下面的三种方式根据具体的应用场景来应用)

前序遍历:根结点+左子树+右子树
在这里插入图片描述

void beforeOrder(BTNode* root)
{
   
 if (root)
 {
   
  printf("%d ", root->val);
  beforeOrder(root->left);
  beforeOrder(root->right);
 }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

中序遍历:左+根+右

void inOrder(BTNode* root)
{
   
 if (root)
 {
   
  inOrder(root->left);
  printf("%d ", root->val);
  inOrder(root->right);
 }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

后续遍历:左+右+根

void endOrder(BTNode* root)
{
   
 if (root)
 {
   
  endOrder(root->left);
  endOrder(root->right);
  printf("%d ", root->val)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/727096
推荐阅读
相关标签
  

闽ICP备14008679号