標籤:
題目:
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 2hnodes inclusive at the last level h.
題意:求一個完全二叉樹的節點個數。
思路:找到最後一層的最後一個節點,可以判斷左右節點最最左邊的層數是否相同,如果相同,則左子樹為滿二叉樹,若不同則右子樹為滿二叉樹。
其中在求解的過程中,需要用到冪次的運算,如果用Math.pow會逾時,可以考慮有位操作,但是要考慮2的0次冪的特殊情況。
代碼:
public class Solution { public int countNodes(TreeNode root) { if(root == null) return 0; int left = countLevel(root.left); int right = countLevel(root.right); int leftpow = 2<<(left-1); int rightpow = 2<<(right-1); if(left == 0) //0次冪,<<不出來 leftpow = 1; if(right == 0) rightpow = 1; if(left == right){ return leftpow + countNodes(root.right); }else return rightpow + countNodes(root.left); } public int countLevel(TreeNode root) { if(root == null) return 0; int count = 0; while(root != null) { count++; root = root.left; } return count; }}
[LeetCode-JAVA] Count Complete Tree Nodes