(劍指offer)二叉樹的深度(遞迴與非遞迴版本)
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
一、遞迴版本;
若存在左子樹,則將左子樹深度加1;
若存在右子樹,則將右子樹深度加1;
若左右子樹均存在,則將左、右子樹深度均加1取最大值;
細節見程式碼:
二、個人感覺需要嘗試寫寫非遞迴,過程可以更清晰;int TreeDepth(TreeNode* pRoot) { if (pRoot == NULL) { return 0; } return max(1+TreeDepth(pRoot->left), 1 + TreeDepth(pRoot->right)); }
相關推薦
劍指offer之二叉樹中和為某一值的路徑(Python)
題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思路:首先要理解題意,是從根節點往子節點連。
劍指Offer------把二叉樹列印成多行(層序遍歷)
題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 <分析>: 本題就是多了個條件 一層輸出一行 那麼就多設定兩個變數即可, 一個此行開始start,另一個此行
劍指offer:二叉樹中和為某一值的路徑(Python)
站在巨人的肩膀上,風景這邊獨好; 親自爬上巨人的肩膀,才知風景為什麼這麼美。 題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思
劍指offer:判斷二叉樹是不是平衡二叉樹(java)
題目:輸入一棵二叉樹的根節點,判斷該樹是不是平衡的二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。 有了求二叉樹的深度的經驗之後再解決這個問題,我們很容易就能想到一個思路:在遍歷樹的每個結點的時候,呼叫函式TreeDepth得到
劍指offer:二叉樹的深度(Python)
題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 解題思路 兩種解法,一種是第一時間的思路,即獲得根節點到每個葉節點的深度,取其中最長的返回: class Soluti
劍指offer:二叉樹的映象(Python)
問題描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 思路描述 程式碼比文字更直觀 文字描述:新建一個二叉樹,利用遞迴法,將源二叉樹上的左節點賦值到新二叉樹的右節點,將源二叉樹上的右節點賦值到新二叉樹的左節點。 Python程式碼
劍指offer之 二叉樹鏡像
tno eno 描述 temp 結點 輸出 urn tree 定義 package Problem19; /* * 問題描述: * 請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像; */ //定義二叉樹的結構 class BinaryTreeNode {
劍指Offer——重建二叉樹
urn return 重復 col 分割 init 樹的遍歷 ++ fin 題目描述: 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,
劍指Offer——把二叉樹打印成多行
blog queue 隊列 int 利用 vector ont str logs 題目描述: 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 分析: 二叉樹的層次遍歷,利用隊列。 代碼: 1 /* 2 struct TreeNode { 3
劍指Offer - 平衡二叉樹
log public oot com int 技術 pos item span https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&tPa
劍指offer-25.二叉樹中和為某一值的路徑
path val tmp aux node ptr body 深度 light 0 題目 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 1 分析 深度優先遍歷+回溯. 出點就是,
劍指Offer:二叉樹打印成多行【23】
tree height -- main lis true evel width pac 劍指Offer:二叉樹打印成多行【23】 題目描述 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 題目分析 Java題解 package tree; i
劍指offer--重建二叉樹
lag node rec 劍指offer == str eno truct 個數字 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4
劍指offer ——重建二叉樹
數字 分析 nal nod 遍歷 中序遍歷 i++ algorithm vector p62 輸入前序和中序遍歷的結果(不包含重復的數字),重建二叉樹。 主要是分析兩個序列的規律,然後用遞歸的方式找到每一個根節點,從而完成構建。 #include<iostream&
python劍指offer系列二叉樹中和為某一值的路徑
not 和為某一值的路徑 python 數組長度 self. expect pytho def lis 題目描述 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(註意:
【Java】 劍指offer(27) 二叉樹的鏡像
.cn tree 解釋 問題 true mir 形象 收獲 ror 本文參考自《劍指offer》一書,代碼采用Java語言。 更多:《劍指Offer》Java實現合集 題目 請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。 思路 畫圖可以很清晰地
劍指offer之二叉樹的深度
1.題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 2.問題分析 方法一: 可以使用遞迴的方法,分別求左子樹和右子樹的深度,則樹的深度是:更大者 + 1。這是一個遞迴的方法。
【劍指offer】二叉樹的下一個節點
給出一棵二叉樹和一個節點,求中序遍歷序列的下一個節點。二叉樹結構是給出了左右節點以及父節點的。 首先分析中序遍歷,中序遍歷即左父右的順序遍歷樹。 分析規律: (1)節點存在右節點 if(p->right) 則不斷檢查p->right是否還有左節點,若沒有左節點了,該節點即
【LeetCode 劍指Offer】 二叉樹的最大與最小深度
求最大深度和最小深度。 最大深度 題目: 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 思路: 1,一個二叉樹的深度 = 以根節點為root的子樹的深度 = max (
[劍指offer] --25.二叉樹中和為某一值的路徑
題目描述 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。 路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前) 解題思路 每次先把開始的頭結點儲存,然後使用輸入的路