《剑指offer》非递归法判定二叉树是否是对称的
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》非递归法判定二叉树是否是对称的
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。
解析:該非遞歸法有點傻傻的,思想是利用隊列進行層次遍歷。然后翻轉該二叉樹,再層次遍歷該二叉樹,最后對比 兩棵樹的節點值是否一樣的,一樣的則是對稱的,不一樣的就不對稱了。
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;}} }總結
以上是生活随笔為你收集整理的《剑指offer》非递归法判定二叉树是否是对称的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》按之字行顺序打印二叉树
- 下一篇: 《美团点评》编程题---有一个二维数组(