赞
踩
- class Solution{
-
- public List<List<Integer>> resList = new ArrayList<List<Integer>>();
-
- public List<List<Integer>> levelOrder(TreeNode root){
- checkFund02(root);
- return resList;
- }
-
- public void checkFund02(TreeNode node){
- if(node == null) return;
- //创建一个队列,用于存储待处理的节点
- Queue<TreeNode> que = new LinkedList<TreeNode>();
- que.offer(node);
-
- while(!que.isEmpty()){
- List<Integer> itemList = new ArrayList<Integer>();
- int len = que.size();
-
- for(int i = 0; i<len; i++){
- TreeNode tmpNode = que.poll();
- itemList.add(tmpNode.val);
-
- if(tmpNode.left != null) que.offer(tmpNode.left);
- if(tmpNode.right != null) que.offer(tmpNode.right);
- }
- resList.add(itemList);
- }
- }
- }
翻转一棵二叉树。
这道题不能使用中序遍历,因为会翻转2次,我使用的是后序遍历:
- //确定参数的返回值
- public TreeNode invertTree(TreeNode root){
- //确定终止条件
- if(root == null){
- return null;
- }
- //确定单层递归的逻辑:
- //后序遍历翻转二叉树
- invertTree(root.left);
- invertTree(root.right);
- invertTree(root);
-
- return root;
- }
-
- //定义一个私有方法,用于交换给定节点的左右孩子
- private void swapChildren(TreeNode root){
- TreeNode tmp = root.left;
- root.left = root.right;
- root.right = tmp;
- }
更简洁版本:
- class Solution {
- public TreeNode invertTree(TreeNode root) {
- if (root == null)
- return root;
- TreeNode temp = root.left;
- root.left = invertTree(root.right);
- root.right = invertTree(temp);
- return root;
- }
- }
- class Solution {
- public boolean isSymmetric(TreeNode root) {
- if(root==null || (root.left==null && root.right==null)) {
- return true;
- }
- //用队列保存节点
- LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
- //将根节点的左右孩子放到队列中
- queue.add(root.left);
- queue.add(root.right);
- while(queue.size()>0) {
- //从队列中取出两个节点,再比较这两个节点
- TreeNode left = queue.removeFirst();
- TreeNode right = queue.removeFirst();
- //如果两个节点都为空就继续循环,两者有一个为空就返回false
- if(left==null && right==null) {
- continue;
- }
- if(left==null || right==null) {
- return false;
- }
- if(left.val!=right.val) {
- return false;
- }
- //将左节点的左孩子, 右节点的右孩子放入队列
- queue.add(left.left);
- queue.add(right.right);
- //将左节点的右孩子,右节点的左孩子放入队列
- queue.add(left.right);
- queue.add(right.left);
- }
-
- return true;
- }
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。