java 對(duì)稱二叉樹的判斷
1. 題目描述
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),用來判斷一顆二叉樹是不是對(duì)稱的。注意,如果一個(gè)二叉樹同此二叉樹的鏡像是同樣的,定義其為對(duì)稱的。
2. 解題思路
可以按照類似層次遍歷,來判斷是否是堆成二叉樹:首先根節(jié)點(diǎn)以及其左右子樹,左子樹的左子樹和右子樹的右子樹相同,以及左子樹的右子樹和右子樹的左子樹相同即可,然后采用遞歸一直判斷下去。
3. 代碼
public class isSymmetrical { public static void main(String[] args) { // 新建一棵二叉搜索樹 TreeNode root=new TreeNode(10); TreeNode n1=new TreeNode(5); TreeNode n2=new TreeNode(5); TreeNode n3=new TreeNode(4); TreeNode n4=new TreeNode(7); TreeNode n5=new TreeNode(7); TreeNode n6=new TreeNode(4); //TreeNode n7=new TreeNode(19); root.left=n1; root.right=n2; n1.left=n3; n1.right=n4; n2.left=n5; n2.right=n6; //n6.right=n7; System.out.println('后序遍歷:'); postOrderTraverse(root); boolean temp=symmetrical(root); System.out.println('n'+'結(jié)果:'+temp); } static boolean symmetrical(TreeNode pRoot) { if(pRoot == null){ return true; } return comRoot(pRoot.left, pRoot.right); } static boolean comRoot(TreeNode left, TreeNode right) { if(left == null) return right==null; if(right == null) return false; if(left.val != right.val) return false; return comRoot(left.right, right.left) && comRoot(left.left, right.right); } // 后序遍歷 public static void postOrderTraverse(TreeNode node) { if (node == null) return; postOrderTraverse(node.left); postOrderTraverse(node.right); System.out.print(node.val + ' '); }}
運(yùn)行:
后序遍歷:4 7 5 7 4 5 10 結(jié)果:true
到此這篇關(guān)于java 對(duì)稱二叉樹的判斷的文章就介紹到這了,更多相關(guān)java 對(duì)稱二叉樹內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. php讀取xml中某個(gè)元素的內(nèi)容(PHP5以上才支持)2. 如何用python識(shí)別滑塊驗(yàn)證碼中的缺口3. ASP.NET MVC視圖頁使用jQuery傳遞異步數(shù)據(jù)的幾種方式詳解4. 三道java新手入門面試題,通往自由的道路--鎖+Volatile5. SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)6. AJAX實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)效果7. Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫8. Java基于redis和mysql實(shí)現(xiàn)簡(jiǎn)單的秒殺(附demo)9. ASP.NET 2.0頁面框架的幾處變化10. python多線程爬取西刺代理的示例代碼
