[数据结构][Leetcode]翻转二叉树

Posted kasperskynod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构][Leetcode]翻转二叉树相关的知识,希望对你有一定的参考价值。

1.问题描述

Invert a binary tree.For example:

to

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

问题来源于Leetcode

https://leetcode.com/problems/invert-binary-tree/

2.问题分析

翻转一个二叉树,直观上看,就是把二叉树的每一层左右顺序倒过来。比如问题中的例子,第三层1-3-6-9经过变换后变成了9-6-3-1,顺序反过来就对了。
再仔细观察一下,对于上面的例子,根节点(root)的左子节点及其所有的子孙节点构成根节点的左子树(left subtree),同样的,根节点(root)的右子节点及其所有的子孙节点构成根节点的右子树(right subtree)。因此翻转一个二叉树,就是把根节点的左子树翻转一下,同样的把右子树翻转一下,在交换左右子树就可以了。

当然,翻转左子树和右子树的过程和当前翻转二叉树的过程没有区别,就是递归的调用当前的函数就可以了。
因此,翻转二叉树的步骤可总结如下:

  1. 翻转根节点的左子树(递归调用当前函数)
  2. 翻转根节点的右子树(递归调用当前函数)
  3. 交换根节点的左子节点与右子节点

3.程序代码

class Solution
public:
void exchange(TreeNode* root)
    TreeNode* node=root;
    if(node!=NULL)
        TreeNode* temp=node->left;
        node->left=node->right;
        node->right=temp;
    
 
TreeNode* invertTree(TreeNode* root) 
    TreeNode* node=root;
    if(root==NULL) 
        return root;
    
    invertTree(node->left);//翻转左子树
    invertTree(node->right);//翻转右子树
    exchange(node);//交换左子节点与右子节点
    return root;

;

以上是关于[数据结构][Leetcode]翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode226. 翻转二叉树(JAVA递归)

LeetCode 0156.上下翻转二叉树 - 一个小巧的办法

LeetCode 951 翻转等价二叉树

951. 翻转等价二叉树

951. 翻转等价二叉树

翻转一棵二叉树