[leetcode]222. Count Complete Tree Nodes完全二叉樹的節點數
阿新 • • 發佈:2018-01-28
col 相對 complete int lee log 滿二叉樹 繼續 root
/* 滿二叉樹的特點是2^n-1,對於完全二叉樹,一個node如果左右子樹深度相同,那麽 是一個滿二叉樹。如果不是,那就把node算上,繼續往下看,下邊的可能是滿二叉樹 由於完全二叉樹中有一些子滿二叉樹,所以可以省時間 */ public int countNodes(TreeNode root) { if (root==null) return 0; int l = getLeft(root); int r = getRight(root); return (l == r)?(1<<l)-1:countNodes(root.left)+countNodes(root.right)+1; }//獲取左子樹深度 private int getLeft(TreeNode root) { if (root==null) return 0; return getLeft(root.left)+1; } //獲取右子樹深度 private int getRight(TreeNode root) { if (root==null) return 0; return getRight(root.right)+1; }
這個題直接遍歷會超時。利用了滿二叉樹的特點,完全二叉樹中滿二叉樹還是有不少的。
對於滿二叉樹的定義,國內的定義除了每個節點都左右子樹外,要求所有葉子節點都在一層上,但是國際上的只要前一個條件就可以。這裏說的滿二叉樹是國內定義的那種。
完全二叉樹相對於滿二叉樹,最後一層可能缺失最右邊幾個節點。
以後遇見完全二叉樹,可以多考慮下滿二叉樹的特點。
[leetcode]222. Count Complete Tree Nodes完全二叉樹的節點數