1.题目描述
2.思路和知识点
(1)按照每层来划分,
第一层是2^0( 1)
第二层是2^1(2,3)
第三层是2^2 (4,5,6,7)
第n层是2^(n-1)
(2)对第二层开始的数字就用reverse.arraylist进行排序,然后再添加到arraylist的集合里面
(3)递归实现
1)假设有以下二叉树,初始状态
1
/ \
2 3
/ \ \
4 5 6
2)根节点的左右子树交换
1
/ \
3 2
\ / \
6 4 5
3)递归处理左子树 3,交换节点 3 的左右子树:
1
/ \
3 2
/ / \
6 4 5
4) 递归处理右子树 2,交换节点 2 的左右子树
1
/ \
3 2
/ / \
6 5 4
继续递归处理各个子树直到叶子节点:
节点 6, 5 和 4 没有子节点,不需要进一步处理。
5)最终状态,最终的翻转后的二叉树是:
1
/ \
3 2
/ / \
6 5 4
3.代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null)
{
return null;
}
TreeNode temp=root.left;
root.left=root.right;
root.right=temp;
invertTree(root.left);
invertTree(root.right);
return root;
}
}