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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)

發布時間:2025/6/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一棵二叉樹,判斷琪是否是自身的鏡像(即:是否對稱)
例如:下面這棵二叉樹是對稱的
? ? ?1
? ? /? \
? 2? ? 2
?/ \? ? / \
3 4? 4? 3
下面這棵二叉樹不對稱。
? ? 1
? ? / \
? 2? ?2
? ? \? ? \
? ? 3? ? 3

?

思路:要判斷一顆二叉樹是否對稱,要判斷一下幾點,可以用遞歸來實現:

  • 判斷一顆二叉樹是不是對稱的,等價于判斷其左右子樹是不是鏡像對稱的
  • 判斷鏡對稱像即判斷對稱的位置上的元素是不是相等
  • 兩個節點A和B對稱等價于:?
    • 這兩個節點上存儲的值相等
    • 節點A的左子樹節點和節點B的右子樹上的節點是對稱的
    • 節點A的右子樹節點和節點A的左子樹上的節點是對稱的
import java.util.LinkedList; import java.util.Queue;public class TestTreeSymmertic {public static void main(String[] args) {TreeNode root = new TreeNode(1);TreeNode rleft = new TreeNode(2);TreeNode rleftleft = new TreeNode(3);TreeNode rleftright = new TreeNode(4);TreeNode rright = new TreeNode(2);TreeNode rrightleft = new TreeNode(4);TreeNode rrightright = new TreeNode(3);root.left = rleft;root.right = rright;rleft.left = rleftleft;rleft.right = rleftright;rright.left = rrightleft;rright.right = rrightright;TestTreeSymmertic t = new TestTreeSymmertic();System.out.println(t.isSymmetricIter(root));}/** 迭代方式* 使用隊列, 這是把遞歸程序改寫成迭代程序的常用方法,常常利用while循環while(!queue.isEmpty()){// 判斷邏輯}return true;*/public boolean isSymmetricIter(TreeNode root) {if(null == root){return true;}Queue<TreeNode> treeNodeQueue = new LinkedList<TreeNode>();treeNodeQueue.offer(root.left);treeNodeQueue.offer(root.right);while(!treeNodeQueue.isEmpty()){TreeNode node1 = treeNodeQueue.poll();TreeNode node2 = treeNodeQueue.poll();if(node1 == null && node2 == null){continue;}if(node1 == null || node2 == null || node1.val != node2.val){return false;}treeNodeQueue.offer(node1.left);treeNodeQueue.offer(node2.right);treeNodeQueue.offer(node1.right);treeNodeQueue.offer(node2.left);}return true;}/*** 遞歸的方式* @param root TreeNode類* @return bool布爾型*/public boolean isSymmetric (TreeNode root) {// write code hereif(null == root ) {return true;}return isTreeSymmertic(root.left, root.right);}boolean isTreeSymmertic(TreeNode pHead1,TreeNode pHead2){// 如果左右節點都為空,表示對稱if(pHead1== null && pHead2==null){return true;}// 其中一個節點為空,不對稱if(pHead1==null){return false;}// 其中一個節點為空,不對稱if(pHead2==null){return false;}//1.判斷當前值左右是否相等,2.判斷左子樹的左節點和右子樹的右節點,3.判斷左子樹的右節點和右子樹的左節點是否相等,三者缺一不可,一直遞歸return (pHead1.val==pHead2.val && isTreeSymmertic(pHead1.left,pHead2.right) && isTreeSymmertic(pHead1.right,pHead2.left));}}

?

?

總結

以上是生活随笔為你收集整理的常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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