中序线索二叉树算法 解决 把二元查找树转变成排序的双向链表
2012-04-04 10:26
363 查看
1.中序线索二叉树算法,源自本科教材《数据结构》
2.把二元查找树转变成排序的双向链表,源自微软的笔试题
typedef struct ThreadTNode { elemtype data; struct ThreadTNode *lchild, *rchild; int ltag, rchild; }ThreadTNode, *ThreadTree void CreateInThread ( ThreadTree T ) { ThreadTree pre = NULL; if( T != NULl ) { InThread( T, pre ); pre->rchild = NULL; pre->rtag = 1; } } void InThread ( ThreadTree p, ThreadTree pre ) { if( p ) { InThread ( p->lchild, pre );//说pre是前驱标记是正确的,说它是后继标记也是正确的, if( p->lchild == NULL ) { p->lchild = pre; p->ltag = 1; } if( pre && pre->rchild == NULL ) { pre->rchild = p; pre->rtag = 1; } pre = p; InThread( p->rchild, pre ); } }
2.把二元查找树转变成排序的双向链表,源自微软的笔试题
typedef struct BSTNode { elemtype data; struct BSTNode *lchild, *rchild; }BSTNode, *BSTree void Convert( BSTree T ) { if( T ) { BSTree tail = NULL; //把前驱后继指针标记看做链表的尾结点指针很恰当,所以命名为tail ConvertBST( tail, T ); // 把T转换成链表后连接到tail上,tail为链表当前尾结点指针 tail->rchild = NULL; } } void ConvertBST( BSTree tail, BSTree p ) { if( p ) { ConvertBST( tail, p->lchild ); p->lchild = tail; if( tail ) tail->rchild = p; tail = p; ConvertBST( tail, p->rchild ); } }
相关文章推荐
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表之C#算法实现
- 算法1-把二元查找树转变成排序的双向链表
- 微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表
- 每天一算法(把二元查找树转变成排序的双向链表 )
- 算法与数据结构面试题(1)-把二元查找树转变成排序的双向链表
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- [算法] 把二元查找树转变成排序的双向链表
- 算法-把二元查找树转变成排序的双向链表
- 算法面试100题——1、把二元查找树转变成排序的双向链表
- 每天学一个算法(2)------二元查找树转变成排序的双向链表
- 每日一道算法题1 ——把二元查找树转变成排序的双向链表
- 算法-1.把二元查找树转变成排序的双向链表
- [面试中的算法]把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表之C#算法实现
- 把二元查找树转变成排序的双向链表--算法001
- 【老鸟学算法】二元查找树转变成排序的双向链表——算法思想及java实现
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表——Java实现