来源:ITINT5
原帖:http://www.itint5.com/oj/#4
题目:
给定一棵完全二叉树的根结点,统计该树的结点总数。树结点类型名为TreeNode,您没必要知道该类型的定义,请使用下面的方法得到某个结点的左,右儿子结点,以及判断某结点是否为NULL。
//获得结点node的左儿子结点
TreeNode getLeftChildNode(TreeNode node);
//获得结点node的右儿子结点
TreeNode getRightChildNode(TreeNode node);
//判断结点node是否为NULL
int isNullNode(TreeNode node);
代码:
原帖:http://www.itint5.com/oj/#4
题目:
给定一棵完全二叉树的根结点,统计该树的结点总数。树结点类型名为TreeNode,您没必要知道该类型的定义,请使用下面的方法得到某个结点的左,右儿子结点,以及判断某结点是否为NULL。
//获得结点node的左儿子结点
TreeNode getLeftChildNode(TreeNode node);
//获得结点node的右儿子结点
TreeNode getRightChildNode(TreeNode node);
//判断结点node是否为NULL
int isNullNode(TreeNode node);
代码:
// 树的高度,沿着左孩子
int getHeight(TreeNode node) {
int height = 0;
while (!isNullNode(node)) {
height++;
node = getLeftChildNode(node);
}
return height;
}
// 高度为height的满二叉树节点个数
int count_perfect_binary_tree_nodes(int height) {
return (int)pow(2, height) - 1;
}
int count_complete_binary_tree_nodes(TreeNode root) {
int count = 0;
while (!isNullNode(root)) {
int left = getHeight(getLeftChildNode(root));
int right = getHeight(getRightChildNode(root));
if (left == right) {
count += count_perfect_binary_tree_nodes(left) + 1;
root = getRightChildNode(root);
} else {
count += count_perfect_binary_tree_nodes(right) + 1;
root = getLeftChildNode(root);
}
}
return count;
}
No comments:
Post a Comment