编写算法,求出二叉树中节点的度数为1的个数,并以n返回。(要求不能使用递归),写出算法思想,并写出程序
时间: 2023-03-02 21:04:41 浏览: 61
算法思想:
1. 创建一个空的栈和一个变量n,用来存储节点度数为1的数量。
2. 从根节点开始,将根节点入栈。
3. 当栈非空时,进行如下操作:
a. 弹出栈顶元素,判断该节点是否为度数为1的节点。
b. 如果是,则将n加1。
c. 如果该节点存在右子树,将右子树入栈。
d. 如果该节点存在左子树,将左子树入栈。
4. 当栈为空时,遍历结束,返回n。
程序如下:
```
def count_degree_one(root):
stack = []
n = 0
stack.append(root)
while stack:
node = stack.pop()
if (node.left is None and node.right is not None) or (node.left is not None and node.right is None):
n += 1
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return n
```
注:这里的node表示二叉树的节点对象,包括属性left和right,分别表示左子树和右子树。
相关问题
编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度
递归算法求二叉树中以元素值为x的结点为根的子树的深度:
1. 如果当前结点为空,则返回。
2. 如果当前结点的值等于x,则以当前结点为根的子树深度为1。
3. 否则,递归遍历当前结点的左子树和右子树,分别求出以x为根的子树深度。
4. 取左右子树深度的最大值,加1即为以x为根的子树深度。
代码如下:
int subtreeDepth(TreeNode* root, int x) {
if (root == NULL) {
return ;
}
if (root->val == x) {
return 1;
}
int leftDepth = subtreeDepth(root->left, x);
int rightDepth = subtreeDepth(root->right, x);
return max(leftDepth, rightDepth) + 1;
}
假如二叉树采用二叉链表储存,请写出二叉链表的C语言定义,并编写算法统计二叉树中节点个数。
二叉链表的C语言定义如下:
```c
typedef struct BiTNode {
ElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
```
其中,`ElemType` 为二叉树节点的数据类型。
统计二叉树中节点个数的算法如下:
```c
int countNodes(BiTree T) {
if (T == NULL) {
return 0;
} else {
return countNodes(T->lchild) + countNodes(T->rchild) + 1;
}
}
```
该算法采用递归的方式实现。当二叉树为空时,返回节点个数为0;否则,返回左子树节点数加右子树节点数再加上根节点,即为整棵树的节点数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)