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);
   }
}
void main()
{
  BiTree T;
  T = createtree(T);
  pretree(T);
}(1)树---》二叉树:把左边第一个孩子放在左边孩子,右边兄弟放在右边孩子
(2)森林--》二叉树:把每棵树转化为二叉树,然后把后一棵树的根节点作为上一棵树右孩子
(3)二叉树--》树
8、赫夫曼树
原文:http://blog.csdn.net/a879365197/article/details/46591913