(一)完成二叉树二叉链表结构的定义 (二)实现二叉链表的创建,先序、中序和后序遍历算法的实现。 (三)实现二叉树求结点个数,求高度,求叶子结点数、交换二叉树左右子树的算法以及其主函数的c++代码
时间: 2023-12-10 08:37:46 浏览: 50
(1)二叉树的建立 (2)求出二叉树的高度 (3)求出二叉树结点个数 (4)先序遍历递归实现 (5)先序遍历非递归实现 (6)求出二叉树叶子结点个数
3星 · 编辑精心推荐
(一)二叉树二叉链表结构的定义:
```c++
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
(二)二叉链表的创建,先序、中序和后序遍历算法的实现:
```c++
// 创建二叉树
TreeNode* createTree() {
int val;
cin >> val;
if (val == -1) {
return nullptr;
}
auto root = new TreeNode(val);
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历
void preorderTraversal(TreeNode* root) {
if (!root) {
return;
}
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 中序遍历
void inorderTraversal(TreeNode* root) {
if (!root) {
return;
}
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(TreeNode* root) {
if (!root) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
```
(三)二叉树求结点个数、求高度、求叶子结点数、交换二叉树左右子树的算法以及其主函数的 C++ 代码:
```c++
// 求二叉树结点数
int getNodeNum(TreeNode* root) {
if (!root) {
return 0;
}
return 1 + getNodeNum(root->left) + getNodeNum(root->right);
}
// 求二叉树高度
int getHeight(TreeNode* root) {
if (!root) {
return 0;
}
return max(getHeight(root->left), getHeight(root->right)) + 1;
}
// 求二叉树叶子结点数
int getLeafNodeNum(TreeNode* root) {
if (!root) {
return 0;
}
if (!root->left && !root->right) {
return 1;
}
return getLeafNodeNum(root->left) + getLeafNodeNum(root->right);
}
// 交换二叉树左右子树
void swapLeftRight(TreeNode* root) {
if (!root) {
return;
}
swapLeftRight(root->left);
swapLeftRight(root->right);
swap(root->left, root->right);
}
int main() {
auto root = createTree();
cout << "先序遍历结果:";
preorderTraversal(root);
cout << endl;
cout << "中序遍历结果:";
inorderTraversal(root);
cout << endl;
cout << "后序遍历结果:";
postorderTraversal(root);
cout << endl;
cout << "结点个数:" << getNodeNum(root) << endl;
cout << "高度:" << getHeight(root) << endl;
cout << "叶子结点数:" << getLeafNodeNum(root) << endl;
swapLeftRight(root);
cout << "交换左右子树后的先序遍历结果:";
preorderTraversal(root);
cout << endl;
return 0;
}
```
阅读全文