二叉樹的最大深度和最小深度實現
二叉樹的最大深度
給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的距離。
如果二叉樹為空,則深度為0
如果不為空,分別求左子樹的深度和右子樹的深度,取最大的再加1.
二叉樹的最小深度
給定一個二叉樹,找出其最小深度。
二叉樹的最小深度為根節點到最近葉子節點的距離。
判斷左子樹或右子樹是否為空,若左子樹為空,則返回右子樹的深度,反之返回左子樹的深度,如果都不為空,則返回左子樹和右子樹深度的最小值。
程式碼實現:
#include <iostream>
#include <vector>
#include <list>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int m_val):val(m_val), left(NULL), right(NULL){
}
TreeNode* createTree(vector<int> list, int start);
};
TreeNode* TreeNode::createTree(vector<int> list, int start){
if(list[start] == '#')
{
return NULL;
}
TreeNode *root = new TreeNode(list[start]);
int lnode = 2*start + 1;
int rnode = 2*start + 2;
if(lnode > list.size() - 1)
{
root->left = NULL;
}
else
{
root->left = createTree(list, lnode);
}
if(rnode > list.size()- 1)
{
root->right = NULL;
}
else
{
root->right = createTree(list, rnode);
}
return root;
}
class Solution{
public:
int MinDepth(TreeNode *root){
if(root == NULL){
return 0;
}
if(root->left == NULL){
return MinDepth(root->right) + 1;
}
if(root->right == NULL){
return MinDepth(root->left) + 1;
}
int leftDepth = MinDepth(root->left) + 1;
int rightDepth = MinDepth(root->right) + 1;
return leftDepth < rightDepth ? leftDepth : rightDepth;
}
int MaxDepth(TreeNode *root){
if(root == NULL){
return 0;
}
int leftDepth = MaxDepth(root->left) + 1;
int rightDepth = MaxDepth(root->right) + 1;
return leftDepth > rightDepth ? leftDepth : rightDepth;
}
};
int main()
{
Solution s;
vector<int> datanum;
datanum.push_back(1);
datanum.push_back(2);
datanum.push_back(3);
datanum.push_back(4);
datanum.push_back(5);
datanum.push_back('#');
datanum.push_back(6);
datanum.push_back('#');
datanum.push_back('#');
datanum.push_back(7);
datanum.push_back(8);
TreeNode *tree, *root;
root = tree->createTree(datanum, 0);
cout << s.MinDepth(root) << endl;
cout << s.MaxDepth(root) << endl;
system("pause");
return 0;
}
相關推薦
找出二叉搜尋樹的最大節點和最小節點
problem:Write recursive versions of TREE-MINIMUM and TREE-MAXIMUM. typedef struct BiTNode { int data; struc
leetcode104 給定一個二叉樹,找出其最大深度。
給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \
Binary Tree Maximum Path Sum 二叉樹中任意路徑的最大和
Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tr
阿里14筆試題-求一個二叉樹最大值和最小值的差值絕對值
阿里巴巴面試題: 輸入:一個二叉樹 輸出:二叉樹的最大值和最小值的差值絕對值 單純從演算法功能上來看 1-可以先建立一個大根堆,把最大的元素挑出來; 2-然後在建立小根堆,把最小的元素挑出來; 3-在求最大和最小差值的絕對值; 程式碼: #if 0 /* 最大堆排序 */
LeetCode104 給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。
給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 /** * Definition for a binary tree node. * struct TreeNode
js 二叉樹刪除最大值和最小值
ret 判斷 lse size pla ren 二叉樹 splay 利用 //刪除最小值function delMinNode (root){ if(!root) { return false; } var current = root;
3.6 在二叉樹中找到累加和為指定值的最長路徑長度
【題目】: 給定一棵二叉樹的頭節點head和一個32位整數sum,二叉樹節點值型別為整型,求累加和為sum的最長路徑長度。路徑是指從某個節點往下,每次最多選擇一個孩子節點或者不選所形成的的節點鏈 例如, 二叉樹如圖所示 -3 3 &
二叉樹的廣度優先遍歷、深度優先遍歷的遞歸和非遞歸實現方式
root 中序遍歷 queue push stack pop pac imp current 二叉樹的遍歷方式: 1、深度優先:遞歸,非遞歸實現方式 1)先序遍歷:先訪問根節點,再依次訪問左子樹和右子樹 2)中序遍歷:先訪問左子樹,再訪問根節點嗎,最後訪問右子樹
(二十二)數組的最大值和最小值
turn i++ pre arr sha println out get new class Demo4 { public static void main(String[] args) { int[] a = new int[]{12,1
輸出二叉樹每一層的最右邊節點
輸入: [1,2,3,null,5,null,4] 輸出: [1, 3, 4] 解釋: 1 <--- / \ 2 3 <--- \ \ 5 4 <--- leetc
二叉樹的遍歷和求二叉樹的深度
二叉樹作為最常碰到和最基礎的資料結構,今天來聊一聊它 二叉樹的遍歷分為深度優先遍歷和廣度優先遍歷,其中,深度優先遍歷又分為先序遍歷,中序遍歷和後序遍歷三種。 先,中,後都是根據根節點而言的 ,即: 先序遍歷:根——左——右 中序遍歷:左——根——右 後序遍歷:
【演算法導論】求二叉樹的葉子數和深度
/**********************************************\ 函式功能:計算葉子節點個數 輸入: 二叉樹的根節點 輸出: 葉子節點個數 \**********************************************/ int countleaf(
java如何求二維陣列的和、最大值和最小值。
public class SecondArray { public static void main(String[] args) { //int a[][]= new int[][]{{1
求二叉樹中兩個節點最遠的距離
一說到二叉樹,就有很多題目,今天在程式設計之美中看到了二叉樹中兩個節點最遠的距離。所以給想借機寫一篇部落格。 在開始之前,我們先想想,兩個最常節點的最遠距離是怎麼樣的? 情況一:最大距離可能一個在左子
數據結構與算法第10周作業——二叉樹的創建和遍歷算法
技術分享 truct order traverse eof 結構 後序遍歷 lib void 一、二叉樹的創建算法(遞歸方式) 二、二叉樹的先序、中序和後序遍歷算法 #include<stdio.h>#include<stdlib.h>typedef
數據結構-第10周作業(二叉樹的創建和遍歷算法)
樹的創建 創建 -1 數據結構 二叉 分享 com jpg 遍歷算法 數據結構-第10周作業(二叉樹的創建和遍歷算法)
編寫C#程序,計算去除最大值和最小值之後的平均值
pub ole eric efault lis ner .get ast c# 有10位評委對跳水運動員做評分,編寫C#程序,計算去除最大得分和最小得分之後的平均得分 作為運動員的跳水成績。 interface IMark using System.Collections
從輸入的值中獲取最大值和最小值,輸入0後結束(利用do_while boolean isRight來標識用戶輸入)
bool out 用戶 system efault 最大 pub string void mport java.util.Scanner; public class DoWhile2 {public static void main(String[] args) { int
給出二叉樹的先序和中序遍歷,給出後序遍歷
logs __main__ font class pre span 思想 style 輸出 實現一個功能: 輸入:一顆二叉樹的先序和中序遍歷 輸出:後續遍歷思想: 先序遍歷中,第一個元素是樹根 在中序遍歷中找到樹根,左邊的是左子樹 右邊的是右子樹
二叉樹的序列化和反序列化
nbsp node 使用遞歸 輸入 特殊字符 this tail 改變 代碼實現 http://blog.csdn.net/qq_27703417/article/details/70958692 先序遍歷二叉樹,如果遇到空節點,就在str的末尾加上“#!”,“#”表示