Leetcode226. 翻转二叉树

Every day a leetcode

题目来源:226. 翻转二叉树

解法1:递归

从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。

如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。

退出条件:空结点,没有交换子节点的必要。

递归到叶子节点,从下往上依次翻转。

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

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

结果:
Leetcode226. 翻转二叉树_第1张图片

你可能感兴趣的:(Every,day,a,leetcode,leetcode,算法,递归)