《剑指offer》非递归法判定二叉树是否是对称的
来源:互联网 发布:我是皇玉玺进阶数据 编辑:程序博客网 时间:2024/06/01 10:19
题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解析:该非递归法有点傻傻的,思想是利用队列进行层次遍历。然后翻转该二叉树,再层次遍历该二叉树,最后对比 两棵树的节点值是否一样的,一样的则是对称的,不一样的就不对称了。
import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { //二叉树镜像 public void reverseTree(TreeNode root){ if(root==null){ return ; } if(root.left!=null){ reverseTree(root.left); } if(root.right!=null){ reverseTree(root.right); } TreeNode temp=root.left; root.left=root.right; root.right=temp; } boolean isSymmetrical(TreeNode pRoot) { if(pRoot==null){ return true; } //队列1存储 TreeNode temp1; Queue<TreeNode> queue1 = new LinkedList<>(); queue1.add(pRoot); List<Integer> list1 =new ArrayList<>(); while(!queue1.isEmpty()){ temp1=queue1.poll(); list1.add(temp1.val); if(temp1.left!=null){ queue1.add(temp1.left); } if(temp1.left==null){ list1.add(-1);//左孩子为空,添加-1标识 } if(temp1.right!=null){ queue1.add(temp1.right); } if(temp1.right==null){ list1.add(-2);//右孩子为空,添加-2标识 } } reverseTree(pRoot); //队列2存储 TreeNode temp2; Queue<TreeNode> queue2 = new LinkedList<>(); queue2.add(pRoot); List<Integer> list2 =new ArrayList<>(); while(!queue2.isEmpty()){ temp2=queue2.poll(); list2.add(temp2.val); if(temp2.left!=null){ queue2.add(temp2.left); } if(temp2.left==null){ list2.add(-1); } if(temp2.right!=null){ queue2.add(temp2.right); } if(temp2.right==null){ list2.add(-2); } } if(list1.equals(list2)){//比较两颗树的节点是否一样的 return true; } else{ return false; } }}
阅读全文
0 0
- 《剑指offer》非递归法判定二叉树是否是对称的
- 剑指offer题解 判断是否是对称的二叉树
- 【剑指offer】判断是否是对称的二叉树
- 剑指offer--对称的二叉树(递归)
- 剑指offer-判断二叉树是否对称
- 判定二叉树是否是BST 递归版本
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- (二叉树)求树的最小深度,平衡树的判定,判定树是否相同,判定对称树
- 剑指offer-----判断二叉树是否对称(java版)
- 14.剑指offer-判断一颗二叉树是否对称
- 剑指offer--对称的二叉树
- 剑指offer 59 - 对称的二叉树
- 《剑指offer》对称的二叉树
- 剑指offer-对称的二叉树
- 剑指offer—对称的二叉树
- 剑指offer:对称的二叉树
- 剑指offer:对称的二叉树
- [剑指offer]对称的二叉树
- hdu1556(树状数组/线段树,区间修改,点查询)
- python的内存管理机制
- SpringBoot 的学习整理
- css代码实时预览(脑洞大开的操作)
- POJ-1456-Supermarket [贪心]
- 《剑指offer》非递归法判定二叉树是否是对称的
- Java对象转为json
- 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列
- CodeForces
- C#继承
- centos6.7系统中zabbix3.0的安装
- 最高的奖励
- (二分) Strange fuction--HDOJ
- 增大Linux的socket最大连接数(针对select,要编译内核)