1. 程式人生 > >【入門】lintcode 632: 二叉樹的最大節點

【入門】lintcode 632: 二叉樹的最大節點

在二叉樹中尋找值最大的節點並返回。

樣例

給出如下一棵二叉樹:

     1
   /   \
 -5     2
 / \   /  \
0   3 -4  -5 

返回值為 3 的節點。

當然是遞迴。

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /*
     * @param root: the root of tree
     * @return: the max node
     */
    public TreeNode maxNode(TreeNode root) {
        // write your code here
        if(root == null)
            return null;
        
        TreeNode max = new TreeNode(root.val);
            
        if(root.left != null){
            TreeNode leftMaxNode = maxNode(root.left);
            max = max.val > leftMaxNode.val ? max : leftMaxNode;
        }
            
        if(root.right != null){
            TreeNode rightMaxNode = maxNode(root.right);
            max = max.val > rightMaxNode.val ? max : rightMaxNode;
        }
            
        return max;

    }
}

方法二:

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /*
     * @param root: the root of tree
     * @return: the max node
     */
    public TreeNode maxNode(TreeNode root) {
        // write your code here
        if(root == null)
            return null;
        
        TreeNode leftMaxNode = maxNode(root.left);
        TreeNode rightMaxNode = maxNode(root.right);
        
        return max(root , max(leftMaxNode,rightMaxNode));
    }
    
    private TreeNode max(TreeNode node1 , TreeNode node2){
        if(node1 == null)
            return node2;
        if(node2 == null)
            return node1;
        if(node1.val > node2.val)
            return node1;
        else
            return node2;
    }
}

相關推薦

入門lintcode 632: 節點

在二叉樹中尋找值最大的節點並返回。 樣例 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值為 3 的節點。

多次過Lintcode 595. 長連續序列

給一棵二叉樹,找到最長連續路徑的長度。 這條路徑是指 任何的節點序列中的起始節點到樹中的任一節點都必須遵循 父-子 聯絡。最長的連續路徑必須是從父親節點到孩子節點(不能逆序)。 樣例 舉個例子: 1 \ 3 / \ 2 4 \

多次過Lintcode 94. 中的路徑和

給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和為兩個節點之間所在路徑上的節點權值之和) 樣例 給出一棵二叉樹: 1 / \ 2 3 返回 6 解題思路: 利用分治法 解決問題 需要

luogu1040加分

num sign 中序 計算方法 個數 整數 一個 -m 輸入輸出 題目描述 設一個n個節點的二叉樹tree的中序遍歷為(1,2,3,…,n),其中數字1,2,3,…,n為節點編號。每個節點都有一個分數(均為正整數),記第i個節點的分數為di,tree及它的每個子樹都有一個

BZOJ3625codeforces438E小朋友和 生成函數+多項式求逆+多項式開根

== reverse turn chang 一個 函數 span 化簡 amp 首先,我們構造一個函數$G(x)$,若存在$k∈C$,則$[x^k]G(x)=1$。 不妨設$F(x)$為最終答案的生成函數,則$[x^n]F(x)$即為權值為$n$的神犇二叉樹個數

練習題proj1 判斷和是否為指定的值

urn http space str ret image binary res input #include <stdio.h> #include <vector> #include <list> #include&l

LeetCode617. 合併

給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。 你需要將他們合併為一個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 NULL 的節點將直接作為新二叉樹的節點。 示例 1: 輸入

LeetCode226. 翻轉

翻轉一棵二叉樹。 示例: 輸入: 4 / \ 2 7 / \ / \ 1 3 6 9 輸出: 4 / \ 7 2 / \ / \

CF438E小朋友和 解題報告

【CF438E】小朋友和二叉樹 Description ​ 我們的小朋友很喜歡電腦科學,而且尤其喜歡二叉樹。 ​ 考慮一個含有\(n\)個互異正整數的序列\(c_1,c_2,\dots,c_n\)。如果一棵帶點權的有根二叉樹滿足其所有頂點的權值都在集合\(\{c_1,c_2,\dots,c_n\}\)中,

BZOJ3625CF438E小朋友和(生成函式,多項式求逆,多項式開根,NTT)

Description 我們的小朋友很喜歡電腦科學,而且尤其喜歡二叉樹。 考慮一個含有n個互異正整數的序列c[1],c[2],...,c[n]。如果一棵帶點權的有根二叉樹滿足其所有頂點的權值都在集合{c[1],c[2],...,c[n]}中,我們的小朋友就會將其稱作神犇的。

BZOJ3625CF438E小朋友和 NTT 生成函式 多項式開根 多項式求逆

題目大意   考慮一個含有n個互異正整數的序列c1,c2,…,cn。如果一棵帶點權的有根二叉樹滿足其所有頂點的權值都在集合{c1,c2,…,cn}中,我們的小朋友就會將其稱作神犇的。並且他認為,一棵帶點權的樹的權值,是其所有頂點權值的總和。   給出一個整數

31給定一個打印出所有從根結點到葉子結點路徑和為 k 的路徑

題目:給定一個二叉樹要求打印出所有從根結點到葉子結點路徑和為value的路徑          例如,給定二叉樹如下要求打印出所有和為9的路徑,有1->6->3->-1和1->7

lintcode 632. 節點

描述: 在二叉樹中尋找值最大的節點並返回。 您在真實的面試中是否遇到過這個題? 樣例 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0

lintcode(632)節點

描述: 在二叉樹中尋找值最大的節點並返回。 樣例; 給出如下一棵二叉樹: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值為 3 的節點。 思路: 遞迴,並且用陣列物件儲存當前結果 public clas

洛谷P1404加分

題目描述 設一個n個節點的二叉樹tree的中序遍歷為(1,2,3,…,n),其中數字1,2,3,…,n為節點編號。每個節點都有一個分數(均為正整數),記第i個節點的分數為di,tree及它的每個子樹都有一個加分,任一棵子樹subtree(也包含tree本身)的

leetcode331. 驗證的前序序列化

輸入格式 ret .com 代碼 二叉樹 題目 逗號 false null 題目描述: 序列化二叉樹的一種方法是使用前序遍歷。當我們遇到一個非空節點時,我們可以記錄下這個節點的值。如果它是一個空節點,我們可以使用一個標記值記錄,例如 #。 例如,上面的二叉樹可以被

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;