广义表和二叉树的转换
来源:互联网 发布:罗马复兴兵种数据 编辑:程序博客网 时间:2024/05/29 14:10
//广义表转二叉树:
设置一个标记变量k,初始值为-1;
设置一个标记结点p;
循环遍历广义表的字符串str;
如果str[i]是左括号:
则设置k为0;
把p压入栈中。
否则如果str[i]是逗号:
则设置k为1。
否则如果str[i]是右括号:
则栈顶元素出栈。
否则如果str[i]是一个字母,用结点temp来存储:
如果k为-1:
则把temp作为根结点并压入栈中。
如果k为0:
如果此时栈顶结点是p,则先出栈;
然后将temp作为栈顶结点的左孩子;
再把temp压入栈中。
如果k为1:
栈顶元素出栈;
将temp作为栈顶结点的右孩子;
输出结点存储的值;
如果左孩子不为空:
输出"(";
递归输出左子树;
如果右子树为空:
输出",)" 。
如果右孩子不为空:
如果左孩子为空:
输出"("。
输出",";
递归输出右子树;
输出")"。
设置一个标记变量k,初始值为-1;
设置一个标记结点p;
循环遍历广义表的字符串str;
如果str[i]是左括号:
则设置k为0;
把p压入栈中。
否则如果str[i]是逗号:
则设置k为1。
否则如果str[i]是右括号:
则栈顶元素出栈。
否则如果str[i]是一个字母,用结点temp来存储:
如果k为-1:
则把temp作为根结点并压入栈中。
如果k为0:
如果此时栈顶结点是p,则先出栈;
然后将temp作为栈顶结点的左孩子;
再把temp压入栈中。
如果k为1:
栈顶元素出栈;
将temp作为栈顶结点的右孩子;
再把temp压入栈中。
struct Node{ char data; Node *lchild=NULL,*rchild=NULL;};typedef struct Node node;node* build(const string &str){ node *root = NULL; unsigned long max_length=str.length(); int k=-1; int top=-1; node *p; node *temp; node* Stack[max_length]; for(int i=0;i<max_length;i++){ if(str[i]=='('){ k=0; top++; Stack[top]=p; } else if(str[i]==','){ k=1; } else if(str[i]==')'){ top--; } else if(isalpha(str[i])){ temp=new node; temp->data=str[i]; if(k==-1){ root=temp; top++; Stack[top]=temp; } else if(k==0){ if(Stack[top]==p){ //这个if语句只是为了代码的可读性,可以不写 top--; } Stack[top]->lchild=temp; top++; Stack[top]=temp; } else if(k==1){ top--; Stack[top]->rchild=temp; top++; Stack[top]=temp; } } } return root;}//二叉树转广义表
输出结点存储的值;
如果左孩子不为空:
输出"(";
递归输出左子树;
如果右子树为空:
输出",)" 。
如果右孩子不为空:
如果左孩子为空:
输出"("。
输出",";
递归输出右子树;
输出")"。
void print_list(node* cur_node){ cout<<cur_node->data; if(cur_node->lchild!=NULL){ cout<<"("; print_list(cur_node->lchild); if(cur_node->rchild==NULL){ cout<<",)"; //可为cout<<")" } } if(cur_node->rchild!=NULL){ if(cur_node->lchild==NULL){ cout<<"("; } cout<<","; print_list(cur_node->rchild); cout<<")"; }}
阅读全文
0 0
- 广义表和二叉树的转换
- 转换二叉树与广义表(C语言版)[二叉树的定义]
- 数据结构之广义表和二叉树
- 广义表的二叉树的形式
- 二叉树的广义表形式
- 二叉树的广义表形式
- 输入二叉树的广义表建立二叉树
- 字符串广义表和多叉树、普通树以及多叉树、普通树和广义表链表表示的相互转换
- 广义表建立二叉树
- 广义表建立二叉树
- 广义表创建二叉树
- 二叉树广义表的序列化反序列化
- 广义表法建立二叉树
- 使用广义表创建二叉树
- 根据广义表构建二叉树
- 输入二叉树的广义表形式建立二叉树+C++
- 二叉树:利用广义表创建二叉树,并实现指定结点的删除
- 广义表表示二叉树结构生成二叉链表的算法
- Java高编考试题
- mybatis(10)--输出映射
- WPF动态加载XAML
- c++复数类Complex的编写
- python16Mysql数据库
- 广义表和二叉树的转换
- 进入juypter notebook的方法
- 启动tomcat,但访问不了solr,页面为404
- 7天学会3门语言,第一天
- UVA839NotSoMobile
- python17常用模块
- oracle-约束
- Lua学习笔记
- CSS学习笔记:布局(内外边距与漂浮)与定位