给定一颗用二叉链表表示地二叉树,其指针为root。试写出求二叉树节点的数目的算法(递归算法或非递归算法)
时间: 2024-03-16 11:42:29 浏览: 72
好的,以下是求二叉树节点数目的递归算法:
```python
def count_nodes(root):
if root is None:
return 0
else:
return 1 + count_nodes(root.left) + count_nodes(root.right)
```
这个算法的思路很简单,就是在每个节点处计数,然后递归计算其左子树和右子树的节点数,最终返回总和。
如果要使用非递归算法,可以采用层序遍历的方法,每次遍历到一个节点就将节点数加一。具体实现可以使用队列来辅助遍历。
相关问题
给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出求二叉树结点的数的算法
好的,下面是求二叉树结点个数的算法:
1. 如果二叉树为空,则结点个数为0,直接返回。
2. 分别递归计算左右子树的结点个数,记为leftCount和rightCount。
3. 结点个数为左右子树的结点个数之和再加1(根结点)。
4. 返回结点个数。
实现代码如下(采用递归方式):
```python
def countNodes(root):
if root is None:
return 0
leftCount = countNodes(root.left)
rightCount = countNodes(root.right)
return leftCount + rightCount + 1
```
希望能够帮到您!
给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出求二叉树结点的数的算法。
当您输入 "给定一棵用二叉链表表示的二叉树,其根指针为 root,试写出求二叉树结点的数的算法。" 时,我的ChitGPT AI将给予以下回答:
可以使用递归的方式来求解二叉树结点的数。具体地,对于一棵二叉树,其结点数等于其左子树的结点数加上右子树的结点数再加上1(根结点)。
因此,可以定义一个递归函数countNodes,以某个结点为根的子树作为参数,返回该子树中的结点数。具体实现方式如下:
int countNodes(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
return countNodes(root->left) + countNodes(root->right) + 1;
}
其中,当给出的子树为空时,其结点数为0;否则,使用递归计算其左子树和右子树的结点数,并相加1(根结点数),即可得到该子树的结点数。
希望以上回答能够帮助您。
阅读全文