(一)完成二叉树二叉链表结构的定义 (二)实现二叉链表的创建,先序、中序和后序遍历算法的实现。 (三)实现二叉树求结点个数,求高度,求叶子结点数、交换二叉树左右子树的算法的c++代码
时间: 2023-12-10 20:37:21 浏览: 101
链表先序建立二叉树,得到中序后序输出,递归和非递归实现(C++代码加设计报告)
5星 · 资源好评率100%
二叉树二叉链表结构的定义:
```c++
struct TreeNode{
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char c):val(c),left(nullptr),right(nullptr){}
};
```
二叉链表的创建,先序、中序和后序遍历算法的实现:
```c++
// 先序遍历创建二叉树
TreeNode* createTreeByPreOrder(){
char c;
cin >> c;
if(c == '#') return nullptr;
TreeNode* root = new TreeNode(c);
root->left = createTreeByPreOrder();
root->right = createTreeByPreOrder();
return root;
}
// 中序遍历二叉树
void inOrder(TreeNode* root){
if(root == nullptr) return;
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
// 先序遍历二叉树
void preOrder(TreeNode* root){
if(root == nullptr) return;
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
// 后序遍历二叉树
void postOrder(TreeNode* root){
if(root == nullptr) return;
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
```
二叉树求结点个数、求高度、求叶子结点数、交换二叉树左右子树的算法的c++代码:
```c++
// 求二叉树结点个数
int getNodeNum(TreeNode* root){
if(root == nullptr) return 0;
return getNodeNum(root->left) + getNodeNum(root->right) + 1;
}
// 求二叉树高度
int getHeight(TreeNode* root){
if(root == nullptr) return 0;
return max(getHeight(root->left), getHeight(root->right)) + 1;
}
// 求二叉树叶子结点数
int getLeafNodeNum(TreeNode* root){
if(root == nullptr) return 0;
if(root->left == nullptr && root->right == nullptr) return 1;
return getLeafNodeNum(root->left) + getLeafNodeNum(root->right);
}
// 交换二叉树左右子树
void swapTree(TreeNode* root){
if(root == nullptr) return;
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
swapTree(root->left);
swapTree(root->right);
}
```
阅读全文