标签:
我们知道堆也是一棵完全二叉树,一般是由数组来实现的。如果父结点的index是k, 那么它的左子结点index为2k+1, 右子结点的index为2k+2. 一个比较自然的想法就是,给树的每个结点标上index, 每个结点的index必须小于树的总结点数目。
实现如下.
public class TreeNode
{
public TreeNode(int v)
{
Val = v;
}
public int Val { get; private set;}
public TreeNode Left { get; set; }
public TreeNode Right { get; set; }
}
public bool IsCompleteBinaryTree(TreeNode root)
{
int count = CountOfTree(root);
return IsCompleteBinaryTree(root, 0, count);
}
private int CountOfTree(TreeNode root)
{
if(root == null) {
return 0;
}
return 1 + CountOfTree(root.Left) + CountOfTree(root.Right);
}
private bool IsCompleteBinaryTree(TreeNode root, int rootIndex, int totalNodes)
{
if(root == null) return true;
if(rootIndex >= totalNodes) {
return false;
}
return IsCompleteBinaryTree(root.Left, 2* rootIndex+1, totalNodes)
&& IsCompleteBinaryTree(root.Right, 2* rootIndex+2, totalNodes);
}
标签:
原文地址:http://www.cnblogs.com/johnson-lu/p/5172318.html