问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能: 1…建立树 2…前序遍历树 3…中序(非递归)遍历树 4…后序遍历树 0…结束
时间: 2024-01-19 09:03:23 浏览: 90
好的,针对您的问题,我可以给出一个C++代码示例,实现一个简单的菜单,并调用相应的函数功能,代码如下:
```c++
#include<iostream>
#include<stack>
using namespace std;
//定义二叉树结点结构体
struct TreeNode{
char data; //存储二叉树结点的数据
TreeNode* left; //存储二叉树结点的左子树
TreeNode* right; //存储二叉树结点的右子树
};
//创建二叉树
void createBinaryTree(TreeNode* &root){
char ch;
cin>>ch;
if(ch == '#'){
root = NULL;
}
else{
root = new TreeNode;
root->data = ch;
createBinaryTree(root->left);
createBinaryTree(root->right);
}
}
//前序遍历二叉树
void preOrder(TreeNode* root){
if(root == NULL){
return;
}
cout<<root->data<<" "; //访问结点
preOrder(root->left); //前序遍历左子树
preOrder(root->right); //前序遍历右子树
}
//中序遍历二叉树(非递归)
void inOrder(TreeNode* root){
stack<TreeNode*> s; //定义一个栈
TreeNode* p = root;
while(p != NULL || !s.empty()){
//将左子树的所有结点入栈
while(p != NULL){
s.push(p);
p = p->left;
}
//此时栈顶结点为最左边的结点
p = s.top();
s.pop();
cout<<p->data<<" "; //访问结点
//访问右子树
p = p->right;
}
}
//后序遍历二叉树
void postOrder(TreeNode* root){
if(root == NULL){
return;
}
postOrder(root->left); //后序遍历左子树
postOrder(root->right); //后序遍历右子树
cout<<root->data<<" "; //访问结点
}
int main(){
TreeNode* root; //定义二叉树的根节点
int choice;
while(1){
cout<<"------------------"<<endl;
cout<<"1…建立树"<<endl;
cout<<"2…前序遍历树"<<endl;
cout<<"3…中序(非递归)遍历树"<<endl;
cout<<"4…后序遍历树"<<endl;
cout<<"0…结束"<<endl;
cout<<"------------------"<<endl;
cout<<"请输入您的选择:";
cin>>choice;
switch(choice){
case 1: //建立二叉树
cout<<"请输入二叉树的结点,以'#'代表空结点:"<<endl;
createBinaryTree(root); //创建二叉树
break;
case 2: //前序遍历二叉树
cout<<"前序遍历结果:"<<endl;
preOrder(root); //前序遍历二叉树
cout<<endl;
break;
case 3: //中序遍历二叉树(非递归)
cout<<"中序遍历结果:"<<endl;
inOrder(root); //中序遍历二叉树(非递归)
cout<<endl;
break;
case 4: //后序遍历二叉树
cout<<"后序遍历结果:"<<endl;
postOrder(root); //后序遍历二叉树
cout<<endl;
break;
case 0: //结束程序
cout<<"程序已结束!"<<endl;
return 0;
default: //输入错误提示
cout<<"您的输入有误,请重新输入!"<<endl;
break;
}
}
return 0;
}
```
在这份代码中,我们通过一个while循环实现了一个简单的菜单,用户可以根据菜单选择相应的操作,包括建立二叉树、前序遍历二叉树、中序遍历二叉树(非递归实现)和后序遍历二叉树。当用户选择结束操作时,程序会退出while循环,结束程序。
阅读全文