1. 程式人生 > >【LeetCode題目記錄-11】判斷二叉樹是否是映象的(對稱的)

【LeetCode題目記錄-11】判斷二叉樹是否是映象的(對稱的)

Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

But the following is not:

    1
   / \
  2   2
   \   \
   3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

【分析1-原創】採用遞迴方案,查看了參考才搞定。

public static boolean isSymmetric(TreeNode root) {
         if(root==null) return true;
         return checkIsSymmetric(root.left,root.right);
    }
    private static boolean checkIsSymmetric(TreeNode leftNode,TreeNode rightNode) {
       if(leftNode==null&&rightNode==null) return true;
       if((leftNode!=null&&rightNode==null)||(leftNode==null&&rightNode!=null)) return false;
       if(leftNode.val!=rightNode.val) return false;
       return checkIsSymmetric(leftNode.left,rightNode.right)&&checkIsSymmetric(leftNode.right,rightNode.left);
} 


【分析2-非原創】用stack對左右進行進stack,然後每一層進行比較。

 public boolean isSymmetric(TreeNode root) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        if (root == null)
            return true;
        Stack<TreeNode> s1 = new Stack<TreeNode>();
        Stack<TreeNode> s2 = new Stack<TreeNode>();
        s1.push(root.left);
        s2.push(root.right);
        while (!s1.empty() && !s2.empty()) {
            TreeNode n1 = s1.pop();
            TreeNode n2 = s2.pop();
            if (n1 == null && n2 == null)
                continue;
            if (n1 == null || n2 == null)
                return false;
            if (n1.val != n2.val)
                return false;
            s1.push(n1.left);
            s2.push(n2.right);
            s1.push(n1.right);
            s2.push(n2.left);
        }
        return true;
    }

相關推薦

LeetCode題目記錄-11判斷是否是映象對稱

Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around it

判斷是否映象 + 將一個變成其映象

判斷一個二叉樹是否是對稱的。 很簡單:空節點 葉子節點是true,只有一個孩子是false。 程式碼: bool isSymmetricalCore(TreeNode* left, TreeNo

劍指offer:映象Python

問題描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 思路描述 程式碼比文字更直觀 文字描述:新建一個二叉樹,利用遞迴法,將源二叉樹上的左節點賦值到新二叉樹的右節點,將源二叉樹上的右節點賦值到新二叉樹的左節點。 Python程式碼

劍指offer判斷是否為平衡

平衡二叉樹(Balanced Binary Tree),具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。 第一種遞迴思路,根據定義來,遞迴返回(r-l)<1 and balancetree(r) and bal

劍指Offer19映象

題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 時間限制:1秒;空間限制:32768K 輸入描述: 二叉樹的映象定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11

判斷是否相等leetcode-100

遞迴依據:兩棵樹相同位置節點的子樹也必須相等 遞迴出口:兩個節點全是None,相等;只有一個是None,不等;兩個都不是None,但節點值不相等,不等。 # Definition for a bi

第十週專案1演算法驗證

/* Copyright (c)2017,煙臺大學計算機與控制工程學院 All rights reserved. 檔名稱:33.cpp 作 者:尚文哲 完成日期:2017年11月9日 問題描述: 執行並重複測試教學內容中涉及的演算法。改

LEETCODE解題記錄——按層輸出

給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。 例如: 給定二叉樹: [3,9,20,null,null,15,7], 3 / \ 9 2

判斷是否平衡letcodeC語言

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。 本題中,一棵高度平衡二叉樹定義為: 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。 示例 1: 給定二叉樹 [3,9,20,null,null,15,7] 3 / \ 9

面試題---判斷兩個結構是否相同

一、首先這個問題是判斷二叉樹的結構是否相同,所以這就和二叉樹的資料的值無關。只需要判斷結構;判斷兩個二叉樹的結構是否相同很簡單。 採用遞迴的思想: (1)如果兩棵二叉樹都為空,返回真 (2)

判斷兩個是否相等函式

bool pd(st *p, st *q) {     if(p==NULL && q==NULL) return true;     else if(p==NULL || q==NU

《劍指offer》面試題39 的深度java

設計模式 博客 rgs 歷史 存在 復制 pri 取值 今天 摘要: 今天翻到了《劍指offer》面試題39,題目二中的解法二是在函數的參數列表中通過指針的方式進行傳值,而java是沒有指針的,所以函數要進行改造。然而我翻了下別人的java版本(我就想看看有什麽高大上的改造

遍歷王道

中序 數組 har 不為 位置 mem 一行 遍歷 uil 題目描述: 二叉樹的前序、中序、後序遍歷的定義:前序遍歷:對任一子樹,先訪問跟,然後遍歷其左子樹,最後遍歷其右子樹;中序遍歷:對任一子樹,先遍歷其左子樹,然後訪問根,最後遍歷其右子樹;後序遍歷:對任一子樹,先遍歷其

python環境下使用mysql數據及數據結構和算法

結點 sel 連續 編號 binary 樹搜索 pass 技術分享 種類 python環境下使用mysql數據及數據結構和二叉樹算法(圖):1 python環境下使用mysql2使用的是 pymysql庫3 開始-->創建connection-->獲取curso

的實現c++

二叉樹的實現(c++) BinNode.h(節點的實現實現) template <typename E> class BinNode { public: virtual ~BinNode() {}; virtual E& element() = 0; vir

劍指offer——14映象交換

/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va

遍歷圖解

二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的節點,並且節點的儲存位置,也就是陣列的下標要能體現節點之間的邏輯關係。—–>一般只用於完全二叉樹 鏈式儲存—–>二叉連結串列  定義: lchild | data | rchild(兩個指標域,一個數據域) typ

對線索的理解

第一次接觸“線索二叉樹”的時候,完全不能理解這種模型。現在想想,大概的原因是看到線索二叉樹是要記錄樹節點的前驅和後繼的時候,下意識就想到“雙向連結串列”那裡去了,認為線索二叉樹也會像雙向連結串列一樣

的深度Depth、連結串列的公共節點

二叉樹的最大深度 給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的距離。 如果二叉樹為空,則深度為0 如果不為空,分別求左子樹的深度和右子樹的深度,取最大的再加1 程式碼實現 int maxdepth(TreeNode* root) {

求解的深度高度_C語言

這是在阿里面試的一道題,剛開始感覺不是很難。於是按查詢最大值和最小值的方法計算二叉樹的深度。結果發現這倆個根本不是一回事。即使你不斷遍歷左子樹,找到了最小 值,但是其最小值節點依然可能會有右子樹,這樣深度也就會不斷增加。也就是說最大值對應的節點並不等同於右子樹的深度,最小值