数据结构:二叉树

来源:互联网 发布:淘宝店铺装修广告图片 编辑:程序博客网 时间:2024/06/14 02:20

   之前自己看书去写了个二叉树,现在看来写的简直误人子弟。。。所以删了,决定重新写一篇。

   二叉树:关于二叉树的学习过程中我的感悟最深的就是你要学好二叉树,那么前提你必须把递归掌握熟练,所以说递归对于二叉树来说至关重要。

   关于二叉树的结点结构,需要一个数据域,两个指针域

typedef struct BtNode
{
BtNode *leftchild;
BtNode *rightchild;
ElemType data;
}BtNode, * BinaryTree;


二叉树的结点的构造初始化和释放直接参照链表的malloc,free就好了


这里给出一个先序构造二叉树的方式,但是注意的是要提前设置结点终结标志

typedef char ElemType;
#define END '#'

然后用字符串来表示例如str="AB##C##"构造出来为

 A

B C

递归构造

BtNode * Create(ElemType *&str)
{
BtNode *s = NULL;
if(*str != END)
{
s = _Buynode();
s->data = *str;
s->leftchild = Create(++str);
s->rightchild = Create(++str);
}
return s;
}


BtNode *CreateTree(ElemType *str)
{
if(str == NULL)
return NULL;
else
return Create(str);
}


再给出一个检验的输出函数(先序输出)

void PreOrder(BtNode *p)//x先序遍历
{
if(p != NULL)
{
cout<<p->data<<" ";
PreOrder(p->leftchild);
PreOrder(p->rightchild);
}
}


这样基本构造就完成了,关于二叉树还有许多许多的函数需要我们去实现,太多了我就不一一写了


二叉树是由三个基本单元组成:根节点,左子树,和右子树

L表示遍历左子树

D表示访问根节点

R表示遍历右子树

我们限定先左后右,就只剩下了三种情况

()序遍历:

(1)访问根节点

(2)先序遍历左子树

(3)先序遍历右子树

()序遍历:

(1)中序遍历左子树

(2)访问根结点

(3)中序遍历右子树

()序遍历:

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根结点




0 0
原创粉丝点击