二叉树及其应用--二叉树的应用
来源:互联网 发布:知乎 日韩军力对比 编辑:程序博客网 时间:2024/05/21 10:07
二叉树带节点数输出
给出二叉树的先序遍历输出(空结点用’.’)表示,请构造二叉树,并输出二叉树的广义表表示,此广义表中每个结点均带有一个整数,这个整数表示对应的子树上结点总数。
输入说明:
一行仅由‘.’与大小写字符构成的字符串,该字符串表示二叉树的前序遍历输出,其中’.’表示空结点,字符串长度不超过100。
输出说明:
在单独一行中二叉树的广义表表示,此广义表中每个结点均带有一个整数,这个整数表示对应的子树上结点总数。具体格式参考输出样例。
输入样列:
ABD…C..
输出样列:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <queue>#include <cctype>using namespace std;#define N 100typedef char Element;struct Node{ Element data; int num; struct Node *lchild; struct Node *rchild;};typedef struct Node BTNode;typedef struct Node * BTree;BTree Create_BTree();BTree NewNode(Element x);void PrintBTreeNum(BTree root);void Pre_Order(BTree root);int GetNum(BTree root);int main(){ BTree root; root=Create_BTree(); Pre_Order(root); PrintBTreeNum(root); printf("\n"); return 0;}BTree NewNode(Element x){ BTree p=(BTree)malloc(sizeof(BTNode)); p‐>data=x; p‐>lchild=NULL; p‐>rchild=NULL; return p;}BTree Create_BTree(){ BTree root; char c; c=getchar(); if(c=='.') return NULL; root=NewNode(c); root‐>lchild=Create_BTree(); root‐>rchild=Create_BTree(); return root;}void Pre_Order(BTree root){ if(root!=NULL) { root‐>num=GetNum(root); Pre_Order(root‐>lchild); Pre_Order(root‐>rchild); }}int GetNum(BTree root){ int num; if(root==NULL) return 0; num=1; if(root‐>lchild!=NULL) num+=GetNum(root‐>lchild); if(root‐>rchild!=NULL) num+=GetNum(root‐>rchild); return num;}void PrintBTreeNum(BTree root){ if(root==NULL); printf("%c[%d]",root‐>data,root‐>num); if(root‐>lchild==NULL&&root‐>rchild==NULL); printf("("); if(root‐>lchild!=NULL) PrintBTreeNum(root‐>lchild); printf(","); if(root‐>rchild!=NULL) PrintBTreeNum(root‐>rchild); printf(")");}
二叉树树状输出I
给出二叉树的先序遍历输出(空结点用’.’)表示,请构造二叉树,并按树状输出该二叉树(竖向)。
输入说明:
一行仅由‘.’与大小写字符构成的字符串,该字符串表示二叉树的前序遍历输出,其中’.’表示空结点,字符串长度不超过100。
输出说明:
输出有若干行,为二叉树的树状输出(竖向),具体格式参考输出样例,为明显起见,输出中用”代替空格。在你的程序用,也请用”代替空格。
输入样列:
ABD…C..
输出样列:
-C
A
-B
–D
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <queue>#include <cctype>using namespace std;#define N 100typedef char Element;struct Node{ Element data; int num; struct Node *lchild; struct Node *rchild;};typedef struct Node BTNode;typedef struct Node * BTree;BTree Create_BTree();BTree NewNode(Element x);void PrintBTreeShape(BTree root,int layer);int main(){ BTree root; root=Create_BTree(); PrintBTreeShape(root,0); return 0;}BTree NewNode(Element x){ BTree p=(BTree)malloc(sizeof(BTNode)); p‐>data=x; p‐>lchild=NULL; p‐>rchild=NULL; return p;}BTree Create_BTree(){ BTree root; char c; c=getchar(); if(c=='.') return NULL; root=NewNode(c); root‐>lchild=Create_BTree(); root‐>rchild=Create_BTree(); return root;}void PrintBTreeShape(BTree root,int layer){ int i; if(root==NULL); PrintBTreeShape(root‐>rchild,layer+1); for(i=0;i<layer;i++) printf("‐"); printf("%c\n",root‐>data); PrintBTreeShape(root‐>lchild,layer+1);}
二叉树树状输出II
给出二叉树的先序遍历输出(空结点用’.’)表示,请构造二叉树,并按树状输出该二叉树(横向)。
输入说明:
一行仅由‘.’与大小写字符构成的字符串,该字符串表示二叉树的前序遍历输出,其中’.’表示空结点,字符串长度不超过100。
输出说明:
输出有若干行,为二叉树的树状输出(横向),具体格式参考输出样例,为明显起见,输出中用”代替空格。在你的程序用,也请用”代替空格。
输入样列:
ABD…C..
输出样列:
–A
-B-C
D
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <queue>#include <cctype>using namespace std;#define N 1000int m=0,n=0;int p=0,q=0;char b[100][100];char c[100][100];int f=0;typedef char Element;struct Node{ int num; Element data; struct Node *lchild; struct Node *rchild;};typedef struct Node BTNode;typedef struct Node * BTree;BTree Create_BTree(char s[]);void PrintBTree(BTree root,int large);int GetNum(BTree root);int isp(char k);BTree Create_BTree(){ char a; BTree T; scanf("%c",&a); if(a=='.') T=NULL; else { T=(BTree )malloc(sizeof(BTNode)); T‐>data=a; T‐>lchild=Create_BTree(); T‐>rchild=Create_BTree(); } return T;}void PrintBTree(BTree root,int large){ if(root==NULL); PrintBTree(root‐>rchild,large+1); for(int i=0;i<large;i++) { b[m][n]='‐'; n++; } b[m][n]=root‐>data; if(f<n) f=n; n=0; m++; PrintBTree(root‐>lchild,large+1);}int judge(int i,int j){ int w,e=0; for(w=j;w<100;w++) if (isp(c[i][w])==1) e++; if (e!=0) return 0; return 1;}int isp(char k){ if (k>='a'&&k<='z') return 1; if (k>='A'&&k<='Z') return 1; return 0;}void work(int x){ for(int i=0;i<x;i++) for(int j=0;j<m;j++) if(isp(c[i][j‐1])==1&&c[i][j]=='‐') c[i][j]='\0'; for(int i=0;i<x;i++) for(int j=0;j<m;j++) if(c[i][j]=='\0') c[i][j]='‐';}int main(){ char s[N]; int i,j; BTree root=NULL; root=Create_BTree(); PrintBTree(root,0); for(j=0;j<=f;j++) { for (i=m‐1;i>=0;i‐‐) { c[p][q]=b[i][j]; q++; } q=0; p++; } work(f+1); for(i=0;i<p;i++) { for(j=0;c[i][j]!='\0';j++) if(judge(i,j)==0||c[i][j]!='‐') printf("%c",c[i][j]); printf("\n"); } return 0;}
二叉树确定
给定一个二叉树的前序和中序遍历,确定二叉树并输出二叉树的后序遍历。
输入说明:
输入仅两行,这两行均是长度为n的字符串,分别表示一颗二叉树的前序和中序遍历。n<200
输出说明:
在单独一行中输出该二叉树的后序遍历。
输入样列:
abdfgceh
fdgbache
输出样列:
fgdbheca
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <queue>#include <cctype>using namespace std;#define N 100typedef char Element;struct Node{ Element data; struct Node *lchild; struct Node *rchild;};typedef struct Node BTNode;typedef struct Node * BTree;BTree Create_BTree(char per[],int s1,int e1,char in[],int s2,int e2);BTree NewNode(Element x);void _Order(BTree root);int Find(char in[],int start,int end,char x){ int i; for(i=start;i<=end;i++) if(in[i]==x) return i; return ‐1;}int main(){ char pre[201],in[201]; gets(pre); gets(in); BTree root; int n=strlen(in); root=Create_BTree(pre,0,n‐1,in,0,n‐1); _Order(root); printf("\n"); return 0;}BTree NewNode(Element x){ BTree p=(BTree)malloc(sizeof(BTNode)); p‐>data=x; p‐>lchild=NULL; p‐>rchild=NULL; return p;}BTree Create_BTree(char pre[],int s1,int e1,char in[],int s2,int e2){ int k; BTree root=NewNode(pre[s1]); k=Find(in,s2,e2,pre[s1]); if(k!=s2) root‐>lchild=Create_BTree(pre,s1+1,s1+(k‐s2),in,s2,k‐1); if(k!=e2) root‐>rchild=Create_BTree(pre,s1+(k‐s2)+1,e1,in,k+1,e2); return root;}void _Order(BTree root){ if(root!=NULL) { _Order(root‐>lchild); _Order(root‐>rchild); printf("%c",root‐>data); }}
表达式树
给定一个表达式的后缀表示,请构造一个表达式树,并输出该表达式树的前序和中序遍历。
输入说明:
输入仅一行,改行表示一个表达式的后缀表示。
输出说明:
输入为两行,分别表示该表达式树的前序和中序遍历
输入样列:
ab+cde+**
输出样列:
*+ab*c+de
a+b*c*d+e
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <queue>#include <cctype>#include <stack>using namespace std;#define N 100typedef char Element;struct Node{ Element data; struct Node *lchild; struct Node *rchild;};typedef struct Node BTNode;typedef struct Node * BTree;BTree Create_BTree(char t[]);BTree NewNode(Element x);void Pre_Order(BTree root);void In_Order(BTree root);bool IsOpetator(char a);int main(){ char t[201]; gets(t); BTree root; root=Create_BTree(t); Pre_Order(root); printf("\n"); In_Order(root); printf("\n"); return 0;}BTree NewNode(Element x){ BTree p=(BTree)malloc(sizeof(BTNode)); p‐>data=x; p‐>lchild=NULL; p‐>rchild=NULL; return p;}bool IsOperator(char a){ if(a=='+'||a=='‐'||a=='*'||a=='/') return true; else return false;}BTree Create_BTree(char t[]){ stack<BTree> s; BTree p=NULL; int i; for(i=0;t[i]!='\0';i++) { p=NewNode(t[i]); if(IsOperator(t[i])) { p‐>rchild=s.top(); s.pop(); p‐>lchild=s.top(); s.pop(); } s.push(p); } p=s.top(); return p;}void Pre_Order(BTree root){ if(root!=NULL) { printf("%c",root‐>data); Pre_Order(root‐>lchild); Pre_Order(root‐>rchild); }}void In_Order(BTree root){ if(root!=NULL) { In_Order(root‐>lchild); printf("%c",root‐>data); In_Order(root‐>rchild); }}
- 二叉树及其应用
- 二叉树及其应用
- 二叉树及其应用--二叉树的应用
- 二叉树及其应用--二叉树遍历
- 二叉树及其应用--二叉树创建
- 二叉树的创建及其简单应用
- 二叉树的遍历及其应用
- 二叉树的基本应用及其他
- 二叉树及其应用--树
- 二叉树接口及其应用
- 遍历二叉树及其应用
- 遍历二叉树及其应用
- 二叉树的应用
- 二叉树的应用
- 二叉树的应用
- 二叉树的应用
- 二叉树的应用
- 二叉树的应用
- Java带有限制的通配符
- RecyclerView代替Listview Gridview 瀑布流
- 使用robotium时的坑
- iovec结构体定义及使用
- Linux的chattr与lsattr命令详解
- 二叉树及其应用--二叉树的应用
- 今天开通了“博客”
- Promise模式
- ZooKeeper的安装与部署
- 349. Intersection of Two Arrays
- 最大公约数和最小公倍数
- 在O(1)时间复杂度删除链表节点
- hdu 5102(队列+节点扩展)
- Git学习日志