二叉树是有限个节点的集合,这个集合可以是空集,也可以是一个根节点和两颗不相交的子二叉树组成的集合,那java怎么求二叉树的叶子节点?下面来我们就来给大家讲解一下。
有两种方法都是递归实现:
方法一、web
将先序遍历打印节点改成:先判断是不是叶子节点(左右子树为空)
若是是计数器+1,若是不是则不作处理
遍历到一个非空节点时判断一次
1.先判断根节点
2.在递归遍历左子树
3.在递归遍历右子树
4.子树的遍历过程遵循1~3
5.当为空树时即到达递归的出口
void _Treeleaf(TreeNode * root, size_t * size) { if (root == NULL) { //空树 return ; } if(size==NULL) { //非法输入 return ; } //左右子书为空,即为叶子节点 if(root->lchild==NULL&&root->rchild==NULL) { (*count)++; } //递归遍历左右子树并计数 _Treeleaf1(root->lchild,count); _Treeleaf1(root->rchild,count); return ; } size_t Treeleaf1(TreeNode* root) { if(root==NULL) { return 0; } size_t count=0; _Treeleaf1(&root,&count); return count; }
方法二、svg
左子树的叶子节点+右子树的叶子节点
size_t Treeleaf(TreeNode* root) { if(root==NULL) { //空树 return 0; } size_t count=0; if(root->lchild==NULL&&root->rchild==NULL) { //只有根节点 return 1; } //统计左子树 size_t lsize=Treeleaf(root->lchild); //统计右子树 size_t rsize=Treeleaf(root->rchild); return lsize+rsize; }
java二叉树高度怎么求?
思路:首先需要一种获取以某个节点为子树的高度方法,使用递归实现。如果一个节点为空,那么这个节点肯定是一颗空树,高度为0;如果不为空,则遍历地比较它的左右子树高度,高的一个为这颗子树的最大高度,然后加上自身的高度即可
/** * 求二叉树的高度: * 首先要一种获取以某个节点为子树的高度的方法,使用递归调用。 * 如果一个节点为空,那么这个节点肯定是一颗空树,高度为0; * 如果不为空,那么我们要遍历地比较它的左子树高度和右子树高度, * 高的一个为这个子树的最大高度,然后加上自己本身的高度就是了 * 获取二叉树的高度,只需要调用第一种方法,即传入根节点 */ //获取二叉树的高度 public int heigh() { return heigh(root); } //获取以某节点为子树的高度 public int heigh(BinaryTreeNode node) { if (node == null) { return 0; //递归结束,空子树高度为0 } else { //递归获取左子树高度 int l = heigh(node.getLeftChirld()); //递归获取右子树高度 int r = heigh(node.getRightChirld()); //高度应该算更高的一边,(+1是因为要算上自身这一层) return l > r ? (l + 1) : (r + 1); } }
二叉树是一个递归地概念,在java中是一个重要的知识点,因此对于求二叉树的高度以及节点数我们都需要掌握哦!最后大家如果想要了解更多java常见问答知识,敬请关注奇Q工具网。
推荐阅读: