本文主要是介绍L56---226.翻转二叉树(广搜)---Java版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;}
}
这篇关于L56---226.翻转二叉树(广搜)---Java版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!