36 二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的
结点,只能调整树中结点指针的指向。
思路
需要注意, last 在函数里,用的是 指针的指针。 如果不这样做,会报错;
自己对指针这部分理解的也不是很深,这部分以后还要再好好看看
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree == NULL) return NULL;
TreeNode* last = NULL;
help(pRootOfTree, &last);
TreeNode* head = last;
while (head && head->left) {
head = head->left;
}
return head;
}
void help(TreeNode* node, TreeNode** last) {
if (node == NULL)
return;
//TreeNode* pCurrent = node;
if (node->left) {
help(node->left, last);
}
node->left = *last;
if (*last) {
(*last)->right = node;
}
(*last) = node;
if (node->right) {
help(node->right, last);
}
}
};