[itint5]完全二叉树节点个数的统计

http://www.itint5.com/oj/#4

这题是利用完全二叉树的性质计算节点数目。那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算。

//使用getLeftChildNode(TreeNode)获得左儿子结点
//使用getRightChildNode(TreeNode)获得右儿子结点
//使用isNullNode(TreeNode)判断结点是否为空
int get_left_height(TreeNode root) {
    if (isNullNode(root)) {
        return 0;
    } else {
        return get_left_height(getLeftChildNode(root)) + 1;
    }
}

int count_complete_binary_tree_nodes(TreeNode root) {
    if (isNullNode(root))
        return 0;
    TreeNode leftNode = getLeftChildNode(root);
    TreeNode rightNode = getRightChildNode(root);
    int lheight = get_left_height(leftNode);
    int rheight = get_left_height(rightNode);
    if (lheight == rheight) {
        return (1 << lheight) + count_complete_binary_tree_nodes(rightNode);
    } else {
        return (1 << rheight) + count_complete_binary_tree_nodes(leftNode);
    }
}

  

posted @ 2014-01-16 00:02  阿牧遥  阅读(389)  评论(0编辑  收藏  举报