跟著carl學算法,本系列博客僅做個人記錄,建議大家都去看carl本人的博客,寫的真的很好的!
代碼隨想錄
LeetCode:101. 對稱二叉樹
給你一個二叉樹的根節點 root , 檢查它是否軸對稱。
示例 1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例 2:
輸入:root = [1,2,2,null,3,null,3]
輸出:false
遞歸法,類似后序遍歷,按照左右中的順序依次比較
public boolean isSymmetric(TreeNode root) {if (root == null)return true;return compare(root.left, root.right);}private boolean compare(TreeNode left, TreeNode right) {if (left == null && right != null)return false;else if (left != null && right == null)return false;else if (left == null && right == null)return true;else if (left != null && right != null && left.val != right.val)return false;else {boolean flag1 = compare(left.left, right.right);boolean flag2 = compare(left.right, right.left);return flag1 && flag2;}}
迭代法,使用隊列來實現,使用隊列來成對的存放需要比較的元素
public boolean isSymmetric(TreeNode root) {if (root == null)return true;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root.left);queue.offer(root.right);while (!queue.isEmpty()) {// 通過隊列來成對的存放需要比較的元素TreeNode left = queue.poll();TreeNode right = queue.poll();if (left == null && right == null)continue;if (left == null || right == null || left.val != right.val)return false;queue.offer(left.left);queue.offer(right.right);queue.offer(left.right);queue.offer(right.left);}return true;}