LeetCode_222Count Complete Tree Nodes

来源:互联网 发布:淘宝女装店铺排行榜 编辑:程序博客网 时间:2024/06/04 00:19

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.

下面是递归,结果是TimeOut

public int countNodes(TreeNode root) {         if(root == null) return 0;         return calNodes(root);        }     private int calNodes(TreeNode root){         if(root == null) return 0;         int count = 0;         count += calNodes(root.left) + calNodes(root.right);         return count;     }

下面是改进版本
如果从某节点一直向左的高度 = 一直向右的高度, 那么以该节点为root的子树一定是complete binary tree. 而 complete binary tree的节点数,可以用公式算出 2^h - 1. 如果高度不相等, 则递归调用 return countNode(left) + countNode(right) + 1.

public int countNodes(TreeNode root) {         if(root == null) return 0;         int left = getLeft(root)+1;         int right = getRight(root)+1;         if(left == right){            return (2<<(left-1))-1;          }else {            return countNodes(root.left)+countNodes(root.right)+1;        }        }     private int getLeft(TreeNode root){         int count = 0;         if(root == null) return 0;         while (root.left!=null) {            root = root.left;            count++;        }         return count;     }     private int getRight(TreeNode root){         int count =0;         if(root == null) return 0;         while(root.right !=null){             root = root.right;             count++;         }         return count;     }
0 0
原创粉丝点击