码迷,mamicode.com
首页 > 其他好文 > 详细

Microsoft leetcode (Symmetric Tree)

时间:2018-02-16 10:40:13      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:node   its   smi   eth   gpo   root   turn   style   new   

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 -> Queue
Use 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;
}

Microsoft leetcode (Symmetric Tree)

标签:node   its   smi   eth   gpo   root   turn   style   new   

原文地址:https://www.cnblogs.com/jjjiajia/p/8450041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!