二叉搜索树与双向链表
程序员文章站
2022-03-09 08:02:42
...
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
题目解析:
二叉搜索树使用中序遍历就是有序的,将二叉树转换成双向链表,就是要改变指针的指向。比如,作左子树的right = 根,根的left = 左子树,根的right = 右子树 ,右子树的left = 根。
AC代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
//双向链表的左边头结点和右边头结点
TreeNode* leftHead = NULL;
TreeNode* rightHead = NULL;
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree == NULL)
return NULL;
Convert(pRootOfTree->left);
if(rightHead == NULL)
leftHead = rightHead = pRootOfTree;
else
{
rightHead->right = pRootOfTree;
pRootOfTree->left = rightHead;
rightHead = pRootOfTree;
}
Convert(pRootOfTree->right);
return leftHead; //双向链表的左边头结点
}
};
(*^▽^*)