zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Leetcode 之Binary Tree Postorder Traversal(47)

LeetCode Tree Binary 47 Traversal
2023-09-14 08:57:33 时间

中序遍历二叉搜索树,得到的是一个有序的结果,找出其中逆序的地方就可以了。如果逆序的地方相邻,只需把逆序的相换即可;如果不相邻,则需要找到第二个逆序对的

第二个元素再做交换。

定义两个指针p和q来指定需要交换的元素,指针pre记录当前结点的前驱结点,用来判断是否逆序。

void recoverTree(TreeNode *root)
      {
          pre = p = q = nullptr;
          dfs(root);
          swap(p->val, q->val);
      }
      void dfs(TreeNode *root)
      {
          if (!root)return;
          dfs(root->left);
          if (pre != nullptr && pre->val > root->val)
          {
              if (p == nullptr)
              {
                  p = pre;
                  q = root;
              }
              else
                  q = root;
          }
          pre = root;
          dfs(root->right);
      }
View Code