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

来源:互联网 发布:linux telnet 安装 编辑:程序博客网 时间:2024/06/01 13:19

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

分析:题目不能新建新的节点,只能用原有的节点来实现。我们知道对收索二叉树的中序遍历顺序正好是从小到大顺序遍历的,因此我想到先对二叉树进行中序遍历,把节点保存起来,然后在遍历每个节点,使其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];}

原创粉丝点击