Leetcode 劍指Offer 28.對稱的二叉樹
阿新 • • 發佈:2020-12-16
題目定義:
請實現一個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。 例如,二叉樹[1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面這個[1,2,2,null,3,null,3] 則不是映象對稱的: 1 / \ 2 2 \ \ 3 3 示例 1: 輸入:root = [1,2,2,3,4,4,3] 輸出:true 示例 2: 輸入:root = [1,2,2,null,3,null,3] 輸出:false 限制: 0 <= 節點個數 <= 1000 注意:本題與主站 101 題相同:https://leetcode-cn.com/problems/symmetric-tree/
遞迴方式(自頂向下):
class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; return dfs(root.left,root.right); } private boolean dfs(TreeNode left,TreeNode right){ if(left == null && right == null) return true; if(left == null || right == null || left.val != right.val) return false; return dfs(left.left,right.right) && dfs(left.right,right.left); } }
迭代方式:
class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; Deque<TreeNode> deque = new LinkedList<>(); deque.offer(root.left); deque.offer(root.right); while(deque.size() > 0){ int size = deque.size(); for(int i = 0; i < size; i += 2){ TreeNode node1 = deque.poll(); TreeNode node2 = deque.poll(); if(node1 ==null && node2 == null) continue; if(node1 == null || node2 == null || node1.val != node2.val) return false; deque.offer(node1.left); deque.offer(node2.right); deque.offer(node1.right); deque.offer(node2.left); } } return true; } }
參考:
https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/