剑指offer 27二叉搜索树与双向链表

class Solution {
public:
void ConvertNode(TreeNode* pRootOfTree,TreeNode** pre)
{
if(pRootOfTree)
{
TreeNode* cur=pRootOfTree;
if(cur->left)
ConvertNode(cur->left,pre);
cur->left=*pre;
if(*pre)
(*pre)->right=cur;
*pre=cur;
if(cur->right)
ConvertNode(cur->right,pre);
} } TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree)
return NULL;
TreeNode* pre=NULL;
ConvertNode(pRootOfTree,&pre);
while(pre->left)
{
pre=pre->left;
}
return pre;
}
};

二叉搜索树的前序遍历就是从小到大输出,因此这里是在中序遍历的基础上进行链表操作。left指针指向前一个数,right指针指向后一个数,在cur结点,设置其left指针,并设置pre结点的right指针。这样递归地把树改为链表。

上一篇:面试题:求第K大元素(topK)?


下一篇:[程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)