1. 程式人生 > >NOWCODER【程式設計題】——平衡二叉樹

NOWCODER【程式設計題】——平衡二叉樹

題目描述

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

解題思路

首先我們應該知道,平衡二叉樹就是每一個根的左右子樹的高度差都不大於1,接下來看我的解體思路:

  1. 實現一個求二叉樹高度的函式;
  2. 利用這個函式求出這個二叉樹左右子樹的高度及高度差diffdepth;
  3. 判斷這個高度差絕對值是否小於1;
  4. 然後遞迴地判斷子樹是否為平衡二叉樹。

不足之處:多次對左右字數求高度,時間複雜度可能會比較高。

實現程式碼

class Solution {
public:
    //定義一個函式求二叉樹的高度
    int depth(TreeNode* Root)
    {
        if(Root==NULL)
            return 0;
        int leftdepth=depth(Root->left);
        int rightdepth=depth(Root->right);
        
        return leftdepth>rightdepth?leftdepth+1:rightdepth+1;
    }
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if(pRoot==NULL)
            return true;
        int leftdepth=depth(pRoot->left);
        int rightdepth=depth(pRoot->right);
        int diffdepth=leftdepth-rightdepth;
        if(diffdepth<-1 || diffdepth>1)
            return false;
        else
            return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
    }
};

相關推薦

NOWCODER程式設計——平衡

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 解題思路 首先我們應該知道,平衡二叉樹就是每一個根的左右子樹的高度差都不大於1,接下來看我的解體思路: 實現一個求二叉樹高度的函式;

C語言平衡

avl 簡介 二叉搜索樹 沒有 TP 假設 它的 left 操作 AVL樹簡介 AVL樹的名字來源於它的發明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL樹是最先發明的自平衡二叉查找樹(Self-Balancing Binary Searc

學習筆記平衡(AVL)簡介及其查詢、插入、建立操作的實現

  目錄 平衡二叉樹簡介: 各種操作實現程式碼:   詳細內容請參見《演算法筆記》P319 初始AVL樹,一知半解,目前不是很懂要如何應用,特記錄下重要內容,以供今後review。   平衡二叉樹簡介: 平衡二叉樹由兩位前

資料結構平衡的構建以及增加刪除操作

一、前言       最近學習中遇到了平衡二叉樹的實用,要求是對一個數據列,進行平衡二叉樹的排列,並畫出結果,小編剛開始的時候不是很會,通過總結資料學習了一下平衡二叉樹的相關知識,通過部落格總結一下。

資料結構平衡之AVL

平衡二叉排序樹 平衡二叉排序樹(Balanced Binary Sort Tree),上一篇部落格【資料結構】二叉排序樹BST講了BST,並且在最後我們說BST上的操作不會超過O(h),既然樹高這麼重要,那麼BBST的研究就是為了使得樹的深度在可接受的範圍內漸近意義下達到O

資料結構平衡[AVL]()——刪除

前面介紹了平衡二叉樹的插入操作:平衡二叉樹的插入,這裡來介紹平衡二叉樹的刪除,平衡二叉樹是一棵帶有平衡條件的二叉查詢樹,其刪除操作是在二叉查詢樹的基礎上新增平衡調整演算法。 先看一下示意圖() /*二叉查詢樹的性質讓我們可以很方便的查詢最小最大鍵值*/ /*查詢最小鍵

數據結構查找平衡AVL

balance 實現 增加 調整 補充 若是 思想 基本思想 頭結點 /*自己看了半天也沒看懂代碼,下次再補充說明*/ 解釋:   平衡二叉樹(Self-Balancing Binary Search Tree 或Height-Balanced Binary Searc

NOWCODER程式設計——的深度

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 程式碼實現: 二叉樹節點定義: struct TreeNode

劍指offer——python第4重建

代碼 subject 序列 eno 描述 color index urn describe 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中

LeetCode 簡單67-的所有路徑

宣告: 今天是第67道題。給定一個二叉樹,返回所有從根節點到葉子節點的路徑。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` )) 正文 題目:給定一個二

平衡(AVL)

平衡二叉樹的定義 (AVL—— 發明者為Adel'son-Vel'skii 和 Landis) 平衡二叉查詢樹(AVL樹),具備二叉查詢樹的特點外,還具有一個重要特點: 它的左子樹和右子樹都是平衡二叉樹,並且左子樹和右子樹的平衡因子不超過1 (也就是每個節點的平衡因子只能是1,0,-1

LeetCode 簡單21-的層次遍歷 II

宣告: 今天是第21道題。給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,

劍指offer程式設計(JAVA實現)——第39平衡

github https://github.com/JasonZhangCauc/JZOffer 劍指offer程式設計題(JAVA實現)——第39題:平衡二叉樹 題目描述

劍指offer平衡

題目:輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if (pRoot == NULL) return true; ret

LeetCode 簡單118-的最小深度

題目描述:給定一個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20

LeetCode 中等54-展開為連結串列

題目描述:給定一個二叉樹,原地將它展開為連結串列。 例如,給定二叉樹 1 / \ 2 5 / \ \ 3 4 6 將其展開為: 1 \ 2 \ 3 \ 4 \ 5

LeetCode 中等67-的前序遍歷

題目描述:給定一個二叉樹,返回它的 前序 遍歷。  示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3] 進階: 遞迴演算法很簡單,你可以通過迭代演算法完成

LeetCode題解94_的中序遍歷

【LeetCode題解】94_二叉樹的中序遍歷 文章目錄 【LeetCode題解】94_二叉樹的中序遍歷 描述 方法一:遞迴 Java 程式碼 Python程式碼 方法二:非遞迴

資料結構搜尋的key-value模型

文章目錄 1. 採用key-value模型判斷一個單詞是否拼寫正確,並且顯示翻譯。 BSVTree.h BSVTree.c 2. 採用key-value模型求出輸入單詞重複出現的次數? BSV

資料結構根據建立字串

你需要採用前序遍歷的方式,將一個二叉樹轉換成一個由括號和整陣列成的字串。空節點則用一對空括號 "()" 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。 示例 1: 輸入: 二叉樹: [1,2,3,4] 1 / \