数据结构——树

1、定义:树是一种非线性结构,是一种一对多的数据结构。

分析树的结构,我们用递归的方法,根结点下面又可以看做是子树。

2、树的存储结构:

我们一般用孩子兄弟法存储。也就是把一个结点的左边第一个孩子放在此结点的左边孩子,把此结点的右兄弟放在此结点的右边孩子。

这样就产生了二叉树。

二叉树和树可以相互对应。

3、二叉树及其性质

总之二叉树有很多特殊的性质,直接研究树会有些麻烦,所以我们通过研究二叉树进而来研究树。

而二叉树的很多特性,可以帮我们解决很多问题,比如与查找问题和排序问题。

4、二叉树的存储

二叉树的存储一般使用链表的方式,也就是二叉链表。

5、遍历二叉树

前序遍历,中序遍历,后序遍历

6、二叉树的建立

以前序遍历的方式为例,建立二叉树。核心是采用递归的方式。

#include <stdlib.h>
#include "conio.h"

#include <stdio.h>

//定义树的结点的结构体
typedef struct TreeNode
{
   char data;
   struct TreeNode * lchild;
   struct TreeNode * rchild;
}TreeNode,*BiTree;

BiTree createtree(BiTree T)
{
  char ch;
  scanf("%c",&ch);
  if(ch == '#')
	  T = NULL;

  else
  {
	  T = (TreeNode *)malloc(sizeof(TreeNode));
      T->data = ch;
	  T->lchild=createtree(T->lchild);
	  T->rchild=createtree(T->rchild);
  }

  return T;
}

void pretree(BiTree T)
{
   if(T)
   {
      printf("%c",T->data);
      pretree(T->lchild);
	  pretree(T->rchild);
   }

}

int depth_left(BiTree tree)
{
   int i;
   if(tree == NULL)
   {
<span style="white-space:pre">	</span>   printf("d");
<span style="white-space:pre">	</span>   return 0;
   }
   else
   {
    i = depth_left(tree->lchild);
<span style="white-space:pre">	</span>printf("%d\n",i);
<span style="white-space:pre">	</span>return i+1;
   }
}
void main()
{
  BiTree T;
  T = createtree(T);
  pretree(T);


}

7、树,二叉树,森林的相互转化

(1)树---》二叉树:把左边第一个孩子放在左边孩子,右边兄弟放在右边孩子

(2)森林--》二叉树:把每棵树转化为二叉树,然后把后一棵树的根节点作为上一棵树右孩子

(3)二叉树--》树


8、赫夫曼树


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值