个人注释
法一:
法二:
struct TreeNode* createTreeNode(int val) { //创建一个树节点,其值为val,左右子树为空
struct TreeNode* ret = malloc(sizeof(struct TreeNode));
ret->val = val, ret->left = ret->right = NULL;
return ret;
}
struct TreeNode* resNode;
void inorder(struct TreeNode* node) {
if (node == NULL) { //递归结束条件
return;
}
inorder(node->left); //node左子树遍历
// 在中序遍历的过程中修改节点指向
resNode->right = node; //使resNode右指针指向node
node->left = NULL; //删除node的左指向
resNode = node; //resNode标记当前所处node,使 后续resNode右指针 指向新的node,形成顺序查找树
inorder(node->right); //当前node->right的前序遍历
}
struct TreeNode* increasingBST(struct TreeNode* root) {
struct TreeNode* dummyNode = createTreeNode(-1); //创建值为-1(值为几不重要)的树节点 避免下面resNode=dummyNode因dummyNode为空而使程序无法运行
resNode = dummyNode; //由下面inorder操作可知:dummyNode右指针指向为 通过操作resNode所形成的顺序查找树的 头(head)指针
inorder(root);
return dummyNode->right;
}
作者:力扣官方题解
链接:https ://leetcode.cn/problems/increasing-order-search-tree/solutions/741961/di-zeng-shun-xu-cha-zhao-shu-by-leetcode-dfrr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。