1. 程式人生 > >【Leetcode】222. Count Complete Tree Nodes

【Leetcode】222. Count Complete Tree Nodes

pan 現在 efi esc rip 一個 view dia 葉子

Question:

Given a complete binary tree, count the number of nodes.

Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h

nodes inclusive at the last level h.


Tips:

給定一個完全二叉樹,求樹中結點的個數。

思路:

完全二叉樹的特性:完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若幹位置的二叉樹。即除了最後一層,前面所有層必須是滿二叉樹。這樣我們就只要找到最後一層幾個葉子節點就可以判斷樹中結點的數量。

只有當左右子樹高度想同的時候,才能知道該節點之前的樹是滿的。

當左右子樹高度不相等,采用遞歸的辦法,來判斷其做左右子樹的高度是否相等。

代碼:

//根據完全二叉樹的特性 除最後一排 前面的樹是滿二叉樹。
    public int
countNodes(TreeNode root) { if (root == null) return 0; int ans=0; int left=getLeft(root); int right=getRight(root); if(left==right){ return (1<<left)-1; }else return 1+countNodes(root.left)+countNodes(root.right); }
private int getLeft(TreeNode root) { int h=0; while(root!=null){ h++; root=root.left; } return h; } private int getRight(TreeNode root) { int h=0; while(root!=null){ h++; root=root.right; } return h; }

【Leetcode】222. Count Complete Tree Nodes