前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LEETCODE】模拟面试-101-Symmetric Tree

【LEETCODE】模拟面试-101-Symmetric Tree

作者头像
杨熹
发布2018-04-03 14:57:18
7910
发布2018-04-03 14:57:18
举报
文章被收录于专栏:杨熹的专栏

图源:新生大学

题目:

https://leetcode.com/problems/symmetric-tree/


分析:

Input: So, we're given a binary tree.

**Output: ** If it's symmetric, we will return True, otherwise False.

**Corner case: ** If the tree is null, the output is True.

**Core case: **

The primitive idea is that, we may use two Deque on each level.

  • 1st one is for left part, 2nd one is for right part.
  • In 1st one, we add from first left child, at the same time, in 2nd one, we add from first right child.
  • Then compare the two nodes, if their values are same, then pop them together.
  • And continue to next child on this level.

Or, we can apply a helper function to optimize this process.

  • Every time we feed two parameters, 1st one is the most left child node, 2nd one is the most right child node.
  • If they are both null, they fit the condition.
  • If they are different, including the case that one is null, another has value, of course it's not symmetric.
  • If they have same values, then move to next level, where we should compare one.left with two.right, as well as, one.right with two.left. And make sure they are both True, the result can be True.

Java

代码语言:javascript
复制
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSymmetric(TreeNode root){
        //corner case
        if ( root == null )
            return true;
        
        //core logic
        return isSymmetric(root.left, root.right);
    }
    
    
    //helper function
    public boolean isSymmetric(TreeNode one, TreeNode two){
        //base case
        if( one == null || two == null ){
            if ( one == two )
                return true;
            else
                return false;
        }
        
        //current layer
        if ( one.val != two.val )
            return false;
        //next layer
        else
            return isSymmetric( one.left, two.right ) && isSymmetric( one.right, two.left );
    }
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.01.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 分析:
  • Java
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档