下面是删除二叉树所有结点的递归算法
时间: 2024-03-10 12:48:45 浏览: 60
以下是删除二叉树所有结点的递归算法:
```
void deleteTree(TreeNode* root) {
if (root == nullptr) {
return;
}
deleteTree(root->left);
deleteTree(root->right);
delete root;
}
```
该算法使用递归方式遍历二叉树,并在每个结点的左右子树递归调用删除操作,最终删除整棵树。注意,该算法只适用于释放动态申请的内存空间,如果结点内部还有其他需要清理的资源,需要在删除结点时进行相应的处理。
相关问题
删除二叉树所有结点的递归算法
以下是删除二叉树所有结点的递归算法:
```
void deleteTree(Node* node) {
if (node == NULL) return;
deleteTree(node->left);
deleteTree(node->right);
delete node;
}
```
这个算法会先递归删除左子树,再递归删除右子树,最后删除根结点。当结点为空时,直接返回。这个算法的时间复杂度为 O(n),其中 n 是二叉树中结点的个数。
在程序开始时用先序/中序/后序遍历的顺序建立二叉链表的递归算法 1、先序遍历二叉树的递归算法 2、中序遍历二叉树的递归算法 3、后序遍历二叉树的递归算法 4、计算二叉树的深度的递归算法 5、统计二叉树的结点个数的递归算法 6、统计二叉树的叶子结点个数的递归算法 7、设计该二叉树第K层的结点个数。 8、求该二叉树中所有结点值最大的元素。 9、打印二叉树的叶子结点数的递归算法
1、先序遍历二叉树的递归算法:
```c
void preorderTraversal(struct TreeNode* root) {
if (root == NULL) return;
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
2、中序遍历二叉树的递归算法:
```c
void inorderTraversal(struct TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
```
3、后序遍历二叉树的递归算法:
```c
void postorderTraversal(struct TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
4、计算二叉树的深度的递归算法:
```c
int maxDepth(struct TreeNode* root) {
if (root == NULL) return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
```
5、统计二叉树的结点个数的递归算法:
```c
int countNodes(struct TreeNode* root) {
if (root == NULL) return 0;
int leftCount = countNodes(root->left);
int rightCount = countNodes(root->right);
return leftCount + rightCount + 1;
}
```
6、统计二叉树的叶子结点个数的递归算法:
```c
int countLeafNodes(struct TreeNode* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1;
int leftCount = countLeafNodes(root->left);
int rightCount = countLeafNodes(root->right);
return leftCount + rightCount;
}
```
7、设计该二叉树第K层的结点个数:
```c
int countNodesAtKLevel(struct TreeNode* root, int k) {
if (root == NULL || k < 1) return 0;
if (k == 1) return 1;
int leftCount = countNodesAtKLevel(root->left, k - 1);
int rightCount = countNodesAtKLevel(root->right, k - 1);
return leftCount + rightCount;
}
```
8、求该二叉树中所有结点值最大的元素:
```c
int findMax(struct TreeNode* root) {
if (root == NULL) return INT_MIN;
int leftMax = findMax(root->left);
int rightMax = findMax(root->right);
return max(max(leftMax, rightMax), root->val);
}
```
9、打印二叉树的叶子结点数的递归算法:
```c
void printLeafNodeCount(struct TreeNode* root) {
printf("Leaf node count: %d\n", countLeafNodes(root));
}
```
阅读全文