lintcode 632. 二叉樹的最大節點
描述:
在二叉樹中尋找值最大的節點並返回。
您在真實的面試中是否遇到過這個題?
樣例給出如下一棵二叉樹:
1
/ \
-5 2
/ \ / \
0 3 -4 -5
返回值為 3
的節點。
思路:肯定遞迴啦QAQ,但是注意不要踩訪問空指標的坑,比如一開始我就踩了幾個
先上程式碼(先乾為敬)
/* version 1.0*/ class Solution { public: /* * @param root: the root of tree * @return: the max node */ TreeNode * maxNode(TreeNode * root) { // write your code here if (nullptr == root) { return nullptr; } else { TreeNode *left, *right; left = maxNode(root->left); left = nullptr == left ? root : left; right = maxNode(root->right); right = nullptr == right ? root : right; int i_left = nullptr == left ? INT_MIN : left->val; int i_right = nullptr == right ? INT_MIN : right->val; TreeNode *childMax = i_left > i_right ? left : right; return root->val > childMax->val ? root : childMax; } } };
覺得太醜了,遂優之
/* version 2.0*/ class Solution { public: /* * @param root: the root of tree * @return: the max node */ TreeNode * maxNode(TreeNode * root) { // write your code here if (nullptr == root) { return nullptr; } else { TreeNode *left, *right; left = right = root; if (nullptr != root->left) left = maxNode(root->left); if (nullptr != root->right) right = maxNode(root->right); TreeNode *childMax = left->val > right->val ? left : right; return root->val > childMax->val ? root : childMax; } } };
這就好看多了
我踩的坑在於:最小子結構是一顆小樹,這個樹要返回三個節點中包含數值最大的那個。按照這個思路遞迴,如果這個樹的左子樹,或右子樹為空,就不遞迴查詢左右子樹。同時,由於後面的比較要訪問左右子樹,所以一開始左右子樹賦初值就是根節點,一波操作,完美避坑(想試坑的話可以讓 left = right = nullptr)
VS下測試用程式碼:/*節點*/ struct TreeNode { TreeNode *left; TreeNode *right; int val; TreeNode(int _val = 0):left(nullptr), right(nullptr), val(_val){} }; int main(void) { TreeNode *node_1 = new TreeNode(1); TreeNode *node__5 = new TreeNode(-5); TreeNode *node_2 = new TreeNode(2); TreeNode *node_0 = new TreeNode(0); TreeNode *node_3 = new TreeNode(3); TreeNode *node__4 = new TreeNode(-4); TreeNode *node__6 = new TreeNode(-6); node_1->left = node__5; node_1->right = node_2; node__5->left = node_0; node__5->right = node_3; node_2->left = node__4; node_2->right = node__6; Solution solution; std::cout << "The result = " << solution.maxNode(node_1)->val << std::endl; system("PAUSE"); return 0; }
相關推薦
lintcode 632. 二叉樹的最大節點
描述: 在二叉樹中尋找值最大的節點並返回。 您在真實的面試中是否遇到過這個題? 樣例 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0
【入門】lintcode 632: 二叉樹的最大節點
在二叉樹中尋找值最大的節點並返回。 樣例 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值為 3 的節點。
lintcode(632)二叉樹的最大節點
描述: 在二叉樹中尋找值最大的節點並返回。 樣例; 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值為 3 的節點。 思路: 遞迴,並且用陣列物件儲存當前結果 public clas
求二叉樹最大葉子節點距離(不含全域性變數)
題目: 輸入一顆二叉樹先序遍歷的字串,輸出該二叉樹的最大葉子節點距離 分析知,最大的距離要麼是經過根節點的一條路徑,要麼是在左子樹中的一條路徑,或者是在右子樹中的一條路徑。 那麼可以知道最大葉子節點的距離是左右子樹的高度和、左子樹最大葉節點距離、右子樹最大葉節點距
查詢二叉樹最大值節點
如題 : 在二叉樹中查詢最大值的節點並返回 測試資料 : {1,-5,3,1,2,-4,-5} 答案 : 3 思路 : 從根節點往下分別查詢左子樹和右子樹的最大節點,再比較左子樹,右子樹,根節點的大小
CODEVS 1501二叉樹最大寬度和高度
它的 logs nbsp 二叉 ace 最小寬度 最大 -h blog 題目描述 Description 給出一個二叉樹,輸出它的最大寬度和高度。 輸入描述 Input Description 第一行一個整數n。 下面n行每行有兩個數,對於第i行的兩個數
求二叉樹最大最小深度
als 最小 log root roo null mat dep tde 1.求二叉樹最大深度 public int maxDepth(TreeNode root) { if(root==null){ return 0;
18.2.14 codevs1501 二叉樹最大寬度和高度
isp 連接 左右 ron esp color 整數 end codevs 題目描述 Description 給出一個二叉樹,輸出它的最大寬度和高度。 輸入描述 Input Description 第一行一個整數n。 下面n行每行有兩
二叉樹最大深度和最小深度
str treenode oot null 避免 結果 一個 blog clas 最大深度: int maxDepth(TreeNode *root) { if(root == NULL) return 0;
2018.3.26 1501 二叉樹最大寬度和高度
一個空格 post 12px 一行 個數 padding pac ide urn 題目描述 給出一個二叉樹,輸出它的最大寬度和高度。 輸入描述 第一行一個整數n。下面n行每行有兩個數,對於第i行的兩個數,代表編號為i的節點所連接的兩個左右兒子的編號。如果沒有某個兒子
LeetCode之二叉樹最大深度(簡單 二叉樹)
問題描述: 給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20
LeetCode662 二叉樹最大寬度
給定一個二叉樹,編寫一個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(full binary tree)結構相同,但一些節點為空。 每一層的寬度被定義為兩個端點(該層最左和最右的非空節點,兩端點間的null節點也計入長度)之間的長度。 示例 1: 輸入:
二叉樹最大深度(遞迴實現python)---LeetCode
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None #
leetcode662. 二叉樹最大寬度
題目連結: https://leetcode-cn.com/problems/maximum-width-of-binary-tree/ 題目: 給定一個二叉樹,編寫一個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(full binary tree)結構
leetcode 662二叉樹最大寬度
一開始的思路是用bfs,但是感覺處理起來比較麻煩,後續會更新bfs的方法,這裡先貼上dfs的方法。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * T
【多次過】Lintcode 595. 二叉樹最長連續序列
給一棵二叉樹,找到最長連續路徑的長度。 這條路徑是指 任何的節點序列中的起始節點到樹中的任一節點都必須遵循 父-子 聯絡。最長的連續路徑必須是從父親節點到孩子節點(不能逆序)。 樣例 舉個例子: 1 \ 3 / \ 2 4 \
LeetCode124 二叉樹最大路徑總和
Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node t
LeetCode 124. 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
二叉樹最大路徑和
給出一個二叉樹,找到其中的最大路徑和。 路徑可以從樹中任意一個節點開始和結束。 例如: 給出如下二叉樹, 1 / \ 2 3 返回6。 初始思路 為了簡化分析,我們先假設二叉樹中所有節點的值都是正數。通過觀察可以
二叉樹最大深度(Java)
題目:輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉子結點一次經過的結點形成樹的一條路徑,最長路徑的長度為樹的深度。根節點的深度為1。 解體思路: 如果根節點為空,則深度為0,返回0,遞迴的出口 如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度, 比較左