老师,我有点不明白反转二叉树这个递归问题为什么要这么写

来源:7-2 一个简单的二叉树问题引发的血案 Invert Binary Tree

tataxqy

2019-04-03

主要这行代码不太懂

swap(root->left,root->right);

前面不是会一直到左子树得最左得叶子结点吗?那为什么传入得参数是根结点得左右节点呢?

写回答

1回答

liuyubobobo

2019-04-04

这里的root,不是整个二叉树的root,而是传入invertTree这个函数中的参数,叫做root。在递归调用的过程中,整棵二叉树的每一个节点。都被叫做了root。

//img.mukewang.com/szimg/5ca4e5ed00019d9903790299.jpg


具体可以参考下面的注释,看能否理解?

class Solution {    

public:    
    // 这个方法的语义是:翻转以root为根节点的二叉树
    TreeNode* invertTree(TreeNode* root) {    
    
        // 对于空树,不作任何操作
        if(root == NULL)    
            return NULL;    
        
        // 翻转root的左子树(以root->left为根节点)    
        invertTree(root->left);    

        // 翻转root的右子树(以root->right为根节点)
        invertTree(root->right);    
        
        // 交换root的左右子树
        swap(root->left, root->right);
            
        return root;    
    }    
};


继续加油!:)

0
1
tataxqy
非常感谢!谢谢老师!我懂了!
2019-04-05
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程