/先序遍历,先处理树根 //最简问题:根节点是null值,直接结束 //1.打印树根数据 //递归处理左子树 //递归处理右子树
时间: 2023-05-16 20:07:49 浏览: 70
答案:
void preorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
// 1.打印树根数据
cout << root->val << " ";
// 2.递归处理左子树
preorderTraversal(root->left);
// 3.递归处理右子树
preorderTraversal(root->right);
}
这是一个二叉树的先序遍历算法,先访问根节点,然后递归地访问左子树和右子树。
相关问题
以二叉链表作为二叉树的存储结构,请用 C 语言请分别编写以下算法: (1)从键盘输入数据,按前序次序建立一棵二叉树,以'#'表示空; (2)统计二叉树中左右子树高度相同的结点个数。 typedef char elemtype ; typedef struct node ( elemtype data ; struct node * Ichild ,* rchild ;} bittree ;//二叉链表 请使用以定义和基本操作完成如下两个函数定义。 bittree * create ();//先序遍历次序建立一棵二叉树 int equaldepth ( bittree * root )// root 指向二叉树根结点,返回结点个数
以下是对应的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef char elemtype;
typedef struct node {
elemtype data;
struct node *lchild, *rchild;
} bittree;
// 先序遍历建立二叉树
bittree* create() {
elemtype data;
scanf("%c", &data);
if (data == '#') {
return NULL;
}
bittree *root = (bittree*)malloc(sizeof(bittree));
root->data = data;
root->lchild = create();
root->rchild = create();
return root;
}
// 获取二叉树的深度
int get_depth(bittree *root) {
if (root == NULL) {
return 0;
}
int left_depth = get_depth(root->lchild);
int right_depth = get_depth(root->rchild);
return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
}
// 统计二叉树中左右子树高度相同的结点个数
int equaldepth(bittree *root) {
if (root == NULL) {
return 0;
}
int left_depth = get_depth(root->lchild);
int right_depth = get_depth(root->rchild);
int count = 0;
if (left_depth == right_depth) {
count = 1;
}
return count + equaldepth(root->lchild) + equaldepth(root->rchild);
}
int main() {
printf("请输入先序遍历序列,以 '#' 表示空节点:\n");
bittree *root = create();
int count = equaldepth(root);
printf("左右子树高度相同的结点个数为: %d\n", count);
return 0;
}
```
这里的 `create()` 函数使用了递归的方式,按照先序遍历的顺序从键盘输入数据来构建二叉树。`equaldepth()` 函数则是递归地获取每个节点的左子树和右子树的深度,如果深度相等,则说明该节点符合条件,加入计数器中。最后返回计数器的值即可。
二叉树进行先序遍历,并打印层号,并用cyu
很高兴为您解答这个问题。以下是一个使用 Python 语言的示例代码,使用了递归方式实现了二叉树的先序遍历,并打印每个节点所在的层号。同时,使用了 Cython 进行加速。
```python
# 定义二叉树节点类
cdef class Node:
cdef public int val
cdef public Node* left
cdef public Node* right
def __init__(self, val):
self.val = val
self.left = NULL
self.right = NULL
# 递归实现先序遍历
cdef void preorder_traversal(Node* node, int level):
if node is not NULL:
print("level:", level, "value:", node.val)
preorder_traversal(node.left, level + 1)
preorder_traversal(node.right, level + 1)
# 定义二叉树根节点
cdef Node* root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
# 调用先序遍历函数
preorder_traversal(root, 1)
```
注意,为了使用 Cython 进行加速,需要将上述代码保存为 `.pyx` 文件,并使用 Cython 进行编译,生成对应的 `.so` 文件。具体的编译方式可以参考 Cython 的官方文档。
希望这个示例代码能够对您有所帮助。