谷歌广告推广网站,关于网站建设的申请,济南做seo外包,wordpress多语言站点给你二叉搜索树的根节点 root #xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下#xff0c;恢复这棵树 。
思路一#xff1a;模拟题意
int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNo…给你二叉搜索树的根节点 root 该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下恢复这棵树 。
思路一模拟题意
int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNode *root)
{if (root NULL) return 0;if (midOrder(pre, err1, err2, root-left) -1) return -1;if (*pre ! NULL (*pre)-val root-val) {if (*err1 NULL) {*err1 *pre;*err2 root;} else {*err2 root;return -1;}}*pre root;if (midOrder(pre, err1, err2, root-right) -1) return -1;return 0;
}void recoverTree(struct TreeNode* root){struct TreeNode *pre NULL;struct TreeNode * err1 NULL;struct TreeNode * err2 NULL;midOrder(pre, err1, err2, root);int tmp;tmp err1-val;err1-val err2-val;err2-val tmp;return;
}
分析
本题要将错误交换的两个数交换回来即可能有两种情况一是两个值所在的节点相邻只有一对错误值将错误值的两个数交换位置即可二是两个值所在的节点不相邻即有两对错误值将第一对错误值前面的数和第二对错误值后面的数交换位置即可解决。
总结
本题考察二叉树交换值的应用分类讨论错误的情况再加以解决即可做出