
解题思路
递归解法,中序遍历+前驱节点
注意前驱节点是引用!
/*
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==nullptr)
return nullptr;
TreeNode*pre=nullptr;
help(pRootOfTree,pre);
while(pRootOfTree->left)
pRootOfTree=pRootOfTree->left;
return pRootOfTree;
}
void help(TreeNode* cur,TreeNode* &pre){
if(cur==nullptr)
return;
help(cur->left,pre);
cur->left=pre; //找到前驱节点
if(pre)pre->right=cur; //假如存在左节点,右旋转
pre=cur; //更新前驱节点为根节点,递归
help(cur->right,pre);
}
};
这篇博客详细介绍了如何使用递归和中序遍历的方法来构建线索二叉树。通过前驱节点的引用,实现了在二叉树中快速查找前驱节点的功能。在构建过程中,当遇到当前节点时,将其左子节点设置为前驱节点,如果前驱节点存在,则更新其右指针指向当前节点,最后不断更新前驱节点以完成整个过程。
209

被折叠的 条评论
为什么被折叠?



