【问题标题】:Why does switching parent nodes not switch its children nodes?为什么切换父节点不切换其子节点?
【发布时间】:2020-07-27 20:30:03
【问题描述】:

例如,在这个问题中:https://leetcode.com/problems/invert-binary-tree/ 正确的解决方案是:

 TreeNode* invertTree(TreeNode* root) {
        if(root!=NULL)
        {
            TreeNode* tmp = (root->left);
            root->left=root->right;
            root->right=tmp;
            invertTree(root->left);
            invertTree(root->right);
        }
        return root;
    }

但是,为什么我们不能简单地做:

TreeNode* invertTree(TreeNode* root) {
        if(root!=NULL)
        {
            TreeNode* tmp = (root->left);
            root->left=root->right;
            root->right=tmp;
        }
        return root;
    }

切换子树的父节点不会同时切换其子节点吗?

【问题讨论】:

  • 您应该在使用调试器逐步完成时绘制树。
  • 我做了,但我认为它也会切换子节点,而不仅仅是选定的节点。

标签: c++ recursion binary-tree


【解决方案1】:

从一棵树开始(至少三层):

      A
    /   \
  B       C
 / \     / \
D   E   F   G

交换根的左右子节点:

      A
    /   \
  C       B
 / \     / \
F   G   D   E

请注意,您尚未到达倒置树:

      A
    /   \
  C       B
 / \     / \
G   F   E   D

【讨论】:

    【解决方案2】:

    交换左右指针只会交换指针,但子树指针(进一步向下)也必须反转。这就是为什么你必须沿着左右树递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多