【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
【劍指Offer】19二叉樹的映象
題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 時間限制: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語言
這是在阿里面試的一道題,剛開始感覺不是很難。於是按查詢最大值和最小值的方法計算二叉樹的深度。結果發現這倆個根本不是一回事。即使你不斷遍歷左子樹,找到了最小 值,但是其最小值節點依然可能會有右子樹,這樣深度也就會不斷增加。也就是說最大值對應的節點並不等同於右子樹的深度,最小值