二叉树的翻转

一、问题分析

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

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

如果是空节点,翻转结束。

1、翻转根节点的左子树 和 右子树

2、翻转左子树(递归调用)

3、翻转右子树(递归调用)

4、返回root

 1 public class Solution {  
 2     public TreeNode invertTree(TreeNode root) {  
 3         if(root == null) return root;  
 4         TreeNode tmp = root.left;  
 5         root.left = root.right;  
 6         root.right = tmp;  
 7         invertTree(root.left);  
 8         invertTree(root.right);  
 9         return root;  
10     }  
11 }  

 

转载于:https://www.cnblogs.com/shirley18/p/9687718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值