C++改写二叉树的一种深度优先遍历算法,要求能够计算出每个顶点的深度。
时间: 2023-06-09 17:04:54 浏览: 123
这里提供一种改写中序遍历的深度优先遍历算法,每次遍历到一个节点时,记录下该节点的深度,并将记录的深度传递给其子节点进行遍历:
```
void depth_first_search(TreeNode* node, int depth) {
if (node == nullptr) {
return;
}
depth_first_search(node->left, depth+1);
node->depth = depth;
depth_first_search(node->right, depth+1);
}
```
其中,`TreeNode` 表示二叉树节点的结构体,包括左右子节点指针和深度:
```
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
int depth;
};
```
相关问题
C++改写二叉树的一种深度优先遍历算法,要求能够计算出每个顶点的深度。并分析其时间复杂度
这是一个基于递归实现的DFS(深度优先搜索)算法,可以实现对二叉树进行深度优先遍历,并计算每个顶点的深度。
算法步骤如下:
1. 遍历根节点
2. 如果根节点不为null,则递归遍历左子树,计算左子树中每个节点的深度,并更新根节点的深度(左子树节点的深度+1)
3. 如果根节点不为null,则递归遍历右子树,计算右子树中每个节点的深度,并更新根节点的深度(右子树节点的深度+1)
时间复杂度:O(n)。
这是因为对于一个n个节点的二叉树,DFS最多遍历每个节点一次,因此最多需要O(n)的时间来完成遍历,并计算每个节点的深度。
请使用一种程序设计语言改写二叉树的一种深度优先遍历算法,要求能够计算出每个顶点的深度。使用C++
Sure! 这是用C语言实现二叉树的深度优先遍历算法,同时计算出每个顶点的深度:
```
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int value;
int depth;
struct node* left_child;
struct node* right_child;
}Node;
void dfs(Node* node){
if(node == NULL){
return;
}
printf("当前节点的值是: %d, 深度是 %d\n", node->value, node->depth);
if(node->left_child != NULL){
node->left_child->depth = node->depth + 1;
dfs(node->left_child);
}
if(node->right_child != NULL){
node->right_child->depth = node->depth + 1;
dfs(node->right_child);
}
}
int main(){
Node* root = NULL;
root = (Node*)malloc(sizeof(Node));
root->value = 1;
root->depth = 0;
root->left_child = (Node*)malloc(sizeof(Node));
root->left_child->value = 2;
root->left_child->depth = 1;
root->right_child = (Node*)malloc(sizeof(Node));
root->right_child->value = 3;
root->right_child->depth = 1;
root->left_child->left_child = (Node*)malloc(sizeof(Node));
root->left_child->left_child->value = 4;
root->left_child->left_child->depth = 2;
root->left_child->right_child = (Node*)malloc(sizeof(Node));
root->left_child->right_child->value = 5;
root->left_child->right_child->depth = 2;
root->right_child->left_child = (Node*)malloc(sizeof(Node));
root->right_child->left_child->value = 6;
root->right_child->left_child->depth = 2;
root->right_child->right_child = (Node*)malloc(sizeof(Node));
root->right_child->right_child->value = 7;
root->right_child->right_child->depth = 2;
dfs(root);
return 0;
}
```
这段代码使用了一个有 `value`, `left_child`, 和 `right_child` 字段的 `Node` 结构体来表示每个节点。在 `dfs` 函数中,它会首先打印出当前节点的值和深度。然后,分别遍历左子树和右子树,并为每个子节点的深度加上一来计算子节点的深度。在 `main` 函数中,我们手动构建了一个二叉树,并将根节点深度设置为0,然后调用了 `dfs(root)` 来启动遍历算法。
阅读全文