Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / 2 2 / \ / 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / 2 2 \ 3 3 Recursive://1. For every level, if root‘s left == root‘s right then we can say it is symmetric.//2. If root1 && root2 are null return true, if root1 || root2 is null return false.class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; }}public boolean isSymmetric(TreeNode root) { return isMirror(root, root);}public boolean isMirror(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) return true; if (root1 == null || root2 == null) return false; return root1.val == root2.val && isMirror(root1.left, root2.right) && isMirror(root1.right, root2.left);} Iterative:DFS -> Stack BFS -> QueueUse stack to traverse all the nodes in the tree and check if left equals to right. public boolean isSymmetric(TreeNode root) { if (root == null) return true; Stack<TreeNode> stack = new Stack<>(); stack.push(root.left); stack.push(root.right); while(!stack.isEmpty()) { TreeNode n1 = stack.pop(), n2 = stack.pop(); if (n1 == null && n2 == null) continue; if (n1 == null || n2 == null || n1.val != n2.val) return false; else { stack.push(n1.left); stack.push(n2.right); stack.push(n1.right); stack.push(n2.left); } } return true;}
原文地址:https://www.cnblogs.com/jjjiajia/p/8450041.html
时间: 2024-11-14 04:56:04