2012年11月3日

二叉树的三叉链表存储和基本操作

摘要: 三叉链表存储表示改进于二叉链表,增加指向父节点的指针,能更好地实现结点间的访问。存储结构/* 二叉树的三叉链表存储表示 */ typedef struct BiTPNode { TElemType data; struct BiTPNode *parent,*lchild,*rchild; /* 双亲、左右孩子指针 */ }BiTPNode,*BiPTree;基本操作(基于C/C++的实现算法)/* 二叉树的三叉链表存储的基本操作(21个) */ #define ClearBiTree DestroyBiTree /* 清空二叉树和销毀二叉树的操作一样 */ void InitBiTr... 阅读全文

posted @ 2012-11-03 23:46 zhuyf87 阅读(14241) 评论(1) 推荐(0) 编辑

推导二叉树遍历结果

摘要: 已知一棵二叉树的先序遍历序列为:ABCDEF,中序遍历序列为CBAEDF,求后序遍历结果。先序为:ABCDEF,所以A为根结点。又中序为:CBAEDF,所以C、B为A的左子树结点,E、D、F是A的右子树的结点。再看先序:ABCDEF,打印A之后接着打印B,所以B是A的左孩子。再看中序:CBAEDF,C于B之前打印,所以C是B的左孩子。看先序:ABCDEF,结合上图可知D是A的右孩子。再看中序:CBAEDF,所以E是D的左孩子,F是D的右孩子。最终得到的二叉树如下:为避免推导失误,可以检查一遍所得二叉树的先序和中序遍历。最后由所得二叉树得到后序遍历:CBEFDA。二叉树遍历有如下性质:已知先序和 阅读全文

posted @ 2012-11-03 21:54 zhuyf87 阅读(971) 评论(0) 推荐(0) 编辑

线索二叉树

摘要: 线索二叉树 (threaded binary tree)上图所示的二叉链表,存在多个空指针域。假设一个二叉链表的结点数为n,则共有2n个指针域。而n个结点的二叉树共有n-1条分支。所以空指针域的个数为:2n - (n-1) = n+1。可以在这n+1个空指针域中保存结点的(以先序、中序或后序遍历的)前驱和后继指针,这样在下次遍历时,可以大大提高速度。将所有空指针域中的rchild指向它的后继。将所有空指针域中的lchild指向它的前驱。线索二叉树(保留遍历时结点在任一串行的前驱和后继的信息):若结点有左子树,则其lchild域指示其左孩子,否则令lchild域指示其前驱;若结点有右子树,则其r 阅读全文

posted @ 2012-11-03 16:04 zhuyf87 阅读(8568) 评论(1) 推荐(1) 编辑

二叉树的遍历

摘要: 二叉树的遍历(traversing binary tree)是指从根节点触发,按照某种次序依次访问二叉树中的所有结点,使得每个结点都被访问一次且仅被访问一次。1 先(前)序遍历若二叉树为空,则空操作返回;否则(1)访问根节点;(2)先序遍历左子树;(3)先序遍历右子树。void PreOrderTraverse(BiPTree T,void(*Visit)(BiPTree)) { /* 先序递归遍历二叉树T */ if(T) { Visit(T); /* 先访问根结点 */ PreOrderTraverse(T->lchild,Visit); /* 再先序遍历左子树 *... 阅读全文

posted @ 2012-11-03 08:36 zhuyf87 阅读(734) 评论(0) 推荐(0) 编辑

导航