您的位置:首页 > Web前端

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

2016-05-26 09:37 351 查看
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指针。这样递归地把树改为链表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: