二叉树的翻转

一、问题分析

翻转一个二叉树,直观上看,就是把二叉树的每一层左右顺序倒过来。比如问题中的例子,第三层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 }  

 

posted @ 2018-09-21 17:39  每天都有一点进步  阅读(654)  评论(0)    收藏  举报