//迭代
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void recoverTree(struct TreeNode* root) {
struct TreeNode *nums[1005];
memset(nums,0,sizeof(nums));
struct TreeNode *pre = NULL,*y = NULL,*x = NULL;
int Top = 0;
while(Top > 0 || root != NULL)
{
while(root != NULL)
{
nums[Top++] = root;
root = root->left;
}
root = nums[--Top]; //中序遍历第一个为最左孩子。
// if (pre != NULL && root->val < pre->val)
// {
// y = root;
// if (x == NULL)
// {
// x = pre;
// }else
// break;
// }
// pre = root;
root = root->right;
}
int t = x->val;
x->val = y->val;
y->val = t;
}
中序遍历递归,迭代(栈),力扣99:恢复搜索二叉树
于 2024-03-18 22:22:28 首次发布