第二个参数必须传二级指针啊,指向指针的指针,,,
其实head就是proot的前一个点而已
分成三部分
1.左子树递归
2.中间节点的两边
3.右子树递归
主函数是建好了双向链表,就一直往左走到头
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void ConvertTree(TreeNode* pRoot, TreeNode** head) {
if (pRoot == NULL) {
return;
}
TreeNode* current = pRoot;
if (pRoot->left) {
ConvertTree(pRoot->left, head);
}
current -> left = *head;
if (*head) {
(*head)->right = current;
}
*head = current;
if (current->right) {
ConvertTree(pRoot->right, head);
}
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* head = NULL;
TreeNode* l = pRootOfTree;
ConvertTree(pRootOfTree, &head);
TreeNode *pHead = head;
while(pHead != NULL && pHead -> left != NULL) {
pHead = pHead -> left;
}
return pHead;
}
};