116 完全二叉树的节点个数

发布时间:2024年01月17日

问题描述:给出一个完全二叉树,求出该树的节点个数。

说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点每填满后,其余每层节点数都打到最大值,并且最下面一层节点都集中在该层最左边的若干位。

DFS求解:全部遍历完即可,不管是否是完全二叉树。

public int number(TreeNode root)
{
if(root==null){return 0;}
return 1+number(root.left)+number(root.right);
}
BFS求解:

public int number(TreeNode root)
{
Queue<TreeNode >queue=new LinkedList<>();
int number=0;
queue.add(root);

while(!queue.isEmpty())
{
TreeNode temp=queue.poll();
number++;
if(temp.left!=null){queue.add(treeNode.left);}
if(temp.right!=null){queue.add(treeNode.right);}
}
return number;
}

减枝算法:对于每一个节点,判断左子树和右子树的高度,若两者高度相同,则左子树就是完全二叉树,那么就对右子树进行递归调用,如果不相同,则右子树的节点数目也可以确定,对左子树进行递归调用。
public int level(TreeNode root)
{
if(root==0){return 0;}
return 1+level(root.left);
}

public int number(TreeNode root,int number)
{
if(root==null){return number;}
number+=1;
if(level(root.left)==level(root.right))
{
return number(root.right,number+1<<(level(root.left)-1)-1);
}else
{
return number(root.left,number+1(level(root.right)-1));
}
}

文章来源:https://blog.csdn.net/qq_52299902/article/details/135656450
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。