解释代码void printNodesWithDegree1(Node* root) { if (root == NULL) { return; } if ((root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL)) { printf("%c ", root->data); } printNodesWithDegree1(root->left); printNodesWithDegree1(root->right); }
时间: 2024-04-13 12:28:54 浏览: 4
这段代码实现了一个函数 `printNodesWithDegree1`,用于打印二叉树中度为 1 的节点。
函数接受一个指向根节点的指针 `root`,并通过递归方式进行遍历。
下面是对该函数的逐行解释:
1. `if (root == NULL) { return; }`:首先进行判断,如果当前节点为空,则直接返回,表示当前二叉树为空。
2. `if ((root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL)) { ... }`:判断当前节点的度是否为 1。如果当前节点的左子节点为空而右子节点不为空,或者左子节点不为空而右子节点为空,则表示当前节点的度为 1。
3. `printf("%c ", root->data);`:打印当前节点的值。这里使用 `%c` 格式说明符来打印字符类型的数据,`root->data` 表示当前节点的数据值。
4. `printNodesWithDegree1(root->left);`:递归遍历当前节点的左子树。通过传入左子节点的指针,再次调用 `printNodesWithDegree1` 函数,实现对左子树的遍历。
5. `printNodesWithDegree1(root->right);`:递归遍历当前节点的右子树。通过传入右子节点的指针,再次调用 `printNodesWithDegree1` 函数,实现对右子树的遍历。
该函数实现了遍历整个二叉树的过程,对每个节点进行判断,如果节点的度为 1,则打印节点的值。
例如,给定以下二叉树:
```
A
/ \
B C
/ \ \
D E F
\
G
```
调用 `printNodesWithDegree1` 函数,并传入根节点指针,将打印度为 1 的节点值:B C E。
希望以上解释能够帮助到你!如果还有其他问题,请随时提问。