首頁 >Java >java教程 >Java如何實現求二叉樹的最大深度(附程式碼)

Java如何實現求二叉樹的最大深度(附程式碼)

不言
不言原創
2018-09-25 15:40:234928瀏覽

這篇文章帶給大家的內容是關於Java如何實現求二元樹的最大深度(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

給定一個二元樹,找出其最大深度。

二元樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

範例:
給定二元樹 [3,9,20,null,null,15,7]

   3
  / \
 9  20
   /  \
  15   7

返回它的最大深度下 3 返回它。

透過此題掌握樹的運用

問題分析:求二元樹的深度;

#大家可以瀏覽二元樹的基本概念一覽來進一步的理解二元樹;

我們同樣是利用遞歸的方法來解決此題,根結點不為空,我們就遞歸遍歷左子樹和右子樹,看哪一個子樹的層數更多,最後直至遍歷到葉子結點;



運用一條語句技巧性的實作:

return nleft > nright ? nleft 1 : nright 1;

以這棵二元樹為例:

   3   / \  9  20

   /  \

  15   7
1.此樹非空

2.遞歸遍歷此樹的左子樹:左子樹非空;左子樹的左子樹和右子樹都為空,則都回傳0,進行判斷,0 == 0,這此樹的左子樹這邊返回0 1 = 1;

#3.遞歸遍歷此樹的右子樹:右子樹非空;右子樹的左子樹和右子樹非空;遞歸遍歷右子樹的左子樹和右子樹的右子樹;右子樹的左子樹的左子樹和右子樹為空,返回0 ,右子樹的右子樹的左子樹和右子樹為空,返回0,進行判斷,0 == 0,則此樹的右子樹的左子樹和右子樹返回0 1 = 1 ,進行判斷1 == 1,則此樹的右子樹這邊返回1 1 = 2;

4.比較左子樹和右子樹,1 < 2 ,則此樹回傳2 1 = 3,則此樹的深度即層數就為3.


#其實此方法的主要想法就是:只要遞歸遍歷一直到此樹的葉子結點,最後只要從葉子結點開始一直向根結點回溯並1,結果就是回溯經過的路徑長度1.

#########代碼實現:### ###
public static class TreeNode
    {
        int data;
        TreeNode left;
        TreeNode right;
        TreeNode(int val)
        {
            data = val;
        }
    }

    public int maxDepth(TreeNode root)
    {
        if (root == null)
            return 0;

        int nleft = maxDepth(root.left);
        int nright = maxDepth(root.right);

        return nleft > nright ? nleft + 1 : nright + 1;
    }
######主函數:######
public static void main(String[] args)
    {
        TreeNode p = new TreeNode(1);
        p.left = new TreeNode(2);
        p.right = new TreeNode(3);
        p.left.left = null;
        p.left.right = null;
        p.right.left = new TreeNode(4);
        p.right.right = new TreeNode(5);

        Tree1 t = new Tree1();
        System.out.println(t.maxDepth(p));
    }
######運行結果:3#########

以上是Java如何實現求二叉樹的最大深度(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn