P151、面试题27:二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。(本质是中序遍历)
二叉树结点的定义如下:
struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
二叉树结点的定义如下:
struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
思路:我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的每个结点。当遍历到根结点的时候,我们把树看成三部分:根结点、根结点的左子树、根结点的右子树。用递归来实现。
测试用例:
1)功能测试(输入的二叉树是完全二叉树,所有结点都没有左/右子树的二叉树,只有一个结点的二叉树);
2)特殊输入测试(指向二叉树根结点的指针的null指针)。