P151、面试题27:二叉搜索树与双向链表
2015-11-10 15:21
176 查看
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。(本质是中序遍历)
二叉树结点的定义如下:
struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
思路:我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的每个结点。当遍历到根结点的时候,我们把树看成三部分:根结点、根结点的左子树、根结点的右子树。用递归来实现。
测试用例:
1)功能测试(输入的二叉树是完全二叉树,所有结点都没有左/右子树的二叉树,只有一个结点的二叉树);
2)特殊输入测试(指向二叉树根结点的指针的null指针)。
二叉树结点的定义如下:
struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
思路:我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的每个结点。当遍历到根结点的时候,我们把树看成三部分:根结点、根结点的左子树、根结点的右子树。用递归来实现。
测试用例:
1)功能测试(输入的二叉树是完全二叉树,所有结点都没有左/右子树的二叉树,只有一个结点的二叉树);
2)特殊输入测试(指向二叉树根结点的指针的null指针)。
相关文章推荐
- 黑马程序员——反射——Class、Constructor、Field、Method及简单框架原理
- 黑马程序员——集合
- 黑马程序员——多线程
- 黑马程序员_ARC
- 黑马程序员——异常
- 黑马程序员——abstract
- 黑马程序员——final
- 程序员如何尽快变的稍微专业一点
- 黑马程序员——多态
- 黑马程序员——构造函数
- 一位前辈工程师职业发展的忠告
- 黑马程序员——私有private
- 如何做个好员工(转载)
- ——黑马程序员——OC中Foundation框架NSString用法总结
- 黑马程序员--IO(一)--概述、字符流、字节流、流操作规律
- 转:女程序员的微博
- 成为专业程序员的6个技巧
- 黑马程序员_java多线程的同步和死锁
- 黑马程序员_自定义异常
- 老程序员应该记住的 5 件事