在程序开始时用先序/中序/后序遍历的顺序建立二叉链表的递归算法(10分) 1、先序遍历二叉树的递归算法 (10分) 2、中序遍历二叉树的递归算法 (10分) 3、后序遍历二叉树的递归算法 (10分) 4、计算二叉树的深度的递归算法 (10分) 5、统计二叉树的结点个数的递归算法 (10分) 6、统计二叉树的叶子结点个数的递归算法(10分) 7、设计该二叉树第K层的结点个数。(10分) 8、求该二叉树中所有结点值最大的元素。(10分) 9、打印二叉树的叶子结点数的递归算法(10分)
时间: 2024-04-06 20:33:23 浏览: 54
编写采用二叉链表形式存储的二叉树的创建、先序、中序、后序和按层遍历的算法
5星 · 资源好评率100%
很抱歉,我是一个语言模型AI,无法进行编程操作。但是我可以为你提供相应的算法描述。
1、先序遍历二叉树的递归算法:
先访问根节点,然后递归遍历左子树和右子树。具体实现如下:
void preOrderTraversal(TreeNode* root) {
if (root == nullptr) return;
cout << root->val << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
2、中序遍历二叉树的递归算法:
先递归遍历左子树,然后访问根节点,最后递归遍历右子树。具体实现如下:
void inOrderTraversal(TreeNode* root) {
if (root == nullptr) return;
inOrderTraversal(root->left);
cout << root->val << " ";
inOrderTraversal(root->right);
}
3、后序遍历二叉树的递归算法:
先递归遍历左子树和右子树,最后访问根节点。具体实现如下:
void postOrderTraversal(TreeNode* root) {
if (root == nullptr) return;
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->val << " ";
}
4、计算二叉树的深度的递归算法:
二叉树的深度等于左右子树深度的较大值加上1。具体实现如下:
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return max(leftDepth, rightDepth) + 1;
}
5、统计二叉树的结点个数的递归算法:
二叉树的节点个数等于左右子树节点个数之和加上1。具体实现如下:
int countNodes(TreeNode* root) {
if (root == nullptr) return 0;
return countNodes(root->left) + countNodes(root->right) + 1;
}
6、统计二叉树的叶子结点个数的递归算法:
如果一个节点的左右子树都为空,则它是叶子节点。具体实现如下:
int countLeaves(TreeNode* root) {
if (root == nullptr) return 0;
if (root->left == nullptr && root->right == nullptr) return 1;
return countLeaves(root->left) + countLeaves(root->right);
}
7、设计该二叉树第K层的结点个数:
如果k等于1,则返回1,否则递归遍历左右子树的第k-1层节点个数之和。具体实现如下:
int countNodesAtKthLevel(TreeNode* root, int k) {
if (root == nullptr) return 0;
if (k == 1) return 1;
return countNodesAtKthLevel(root->left, k - 1) + countNodesAtKthLevel(root->right, k - 1);
}
8、求该二叉树中所有结点值最大的元素:
分别递归遍历左右子树,找到节点值最大的节点并返回。具体实现如下:
int findMax(TreeNode* root) {
if (root == nullptr) return INT_MIN;
int leftMax = findMax(root->left);
int rightMax = findMax(root->right);
return max(root->val, max(leftMax, rightMax));
}
9、打印二叉树的叶子结点数的递归算法:
如果一个节点的左右子树都为空,则它是叶子节点,打印该节点的值并返回1,否则递归遍历左右子树的叶子节点个数之和。具体实现如下:
int printLeaves(TreeNode* root) {
if (root == nullptr) return 0;
if (root->left == nullptr && root->right == nullptr) {
cout << root->val << " ";
return 1;
}
return printLeaves(root->left) + printLeaves(root->right);
}
阅读全文