日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《剑指offer》非递归法判定二叉树是否是对称的

發布時間:2024/1/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《剑指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》非递归法判定二叉树是否是对称的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。