求二叉树中度为2的结点的算法代码
时间: 2023-06-06 20:06:17 浏览: 163
以下是求二叉树中度为2的结点的算法代码:
```
void countNodesWithDegree2(Node* root, int& count) {
if (!root) {
return;
}
if (root->left && root->right) {
count++;
}
countNodesWithDegree2(root->left, count);
countNodesWithDegree2(root->right, count);
}
```
该算法使用从根节点开始的递归,遍历整个二叉树,并将具有两个子节点的节点的计数增加。
相关问题
若用二叉链表作为二叉树的存储表示,请设计算法求二叉树中度为 1 的结点个数。
可以按照以下算法实现求二叉树中度为1的节点个数:
1. 初始化变量 count 为0,根节点 root 入队。
2. 循环执行以下操作直到队列为空:
1) 出队一个节点p。
2) 如果p的左右孩子均为NULL,跳过当前循环,继续下一次循环。
3) 如果p只有左孩子或只有右孩子,则令 count 加1。
4) 如果p有左右孩子,将其左右孩子入队。
3. 返回 count 值即为二叉树中度为1的节点个数。
示例代码如下:
```python
def count_degree_1(root):
if not root:
return 0
count = 0
queue = [root]
while queue:
p = queue.pop(0)
if not p.left and not p.right:
continue
if not p.left or not p.right:
count += 1
if p.left:
queue.append(p.left)
if p.right:
queue.append(p.right)
return count
```
设计算法求二叉树T中度为1的结点总数
可以通过遍历二叉树,统计度为1的节点个数来实现。具体算法如下:
1. 定义一个计数器count,初始值为0。
2. 从根节点开始遍历二叉树,对于每个节点,判断其度数是否为1,如果是,则将计数器count加1。
3. 递归地遍历节点的左右子树,重复步骤2。
4. 遍历完整个二叉树后,返回计数器count的值。
算法的时间复杂度为O(n),其中n为二叉树中节点的个数。以下是该算法的Python代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_degree_one(root):
if not root:
return 0
count = 0
if not root.left and root.right: # 只有右子树
count += 1
elif root.left and not root.right: # 只有左子树
count += 1
count += count_degree_one(root.left) + count_degree_one(root.right)
return count
```
在上面的代码中,我们定义了一个TreeNode类来表示二叉树中的节点。count_degree_one函数接受一个二叉树的根节点root作为参数,返回二叉树中度为1的节点个数。在函数中,我们首先判断当前节点的度数是否为1,如果是,则计数器count加1,然后递归遍历左右子树,将子树中的度为1的节点个数累加到count中。最后返回count的值即可。
阅读全文