您的位置:首页 > Web前端

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

2017-07-15 22:13 459 查看
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

分析:题目不能新建新的节点,只能用原有的节点来实现。我们知道对收索二叉树的中序遍历顺序正好是从小到大顺序遍历的,因此我想到先对二叉树进行中序遍历,把节点保存起来,然后在遍历每个节点,使其left指向前一个节点,right指向后一个节点。

程序:

void midiorder(TreeNode *pRootOfTree,vector<TreeNode *> &temp){  //中序遍历;
if(pRootOfTree->left)
midiorder(pRootOfTree->left,temp);
temp.push_back(pRootOfTree);
if(pRootOfTree->right)
midiorder(pRootOfTree->right,temp);
}

TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree)  return NULL;
vector<TreeNode*>  temp;
midiorder(pRootOfTree,temp);
int i=0;
temp[0]->left=NULL;
while(i<temp.size()){
if(i+1<temp.size()) temp[i]->right=temp[i+1];
if(i-1>=0)  temp[i]->left=temp[i-1];
i++;
}
temp[i-1]->right=NULL;
return temp[0];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: