前序遍历二叉树的程序,Unhandled exception in main.exe(MSVCRT.dll):0xC0000005:Access Violation问题
#include #include #define M 10typedef struct bnode{char data;struct bnode *lchild;struct bnode *rchild;}Bnode, *BTree;/*建立二叉树*/ void creat_BTree(BTree* T){char n;n=getchar();if(n=='#')*T=NULL;else if(n=='
') return; else {(*T)=(BTree)malloc(sizeof(Bnode));(*T)->data=n;creat_BTree(&(*T)->lchild);creat_BTree(&(*T)->rchild);}}/*前序遍历*/ void r_preorder(BTree T){if(T){ printf("%c",T->data);r_preorder(T->lchild);r_preorder(T->rchild);}}/*后序遍历*/ void r_posorder(BTree T){if(T){r_posorder(T->lchild);r_posorder(T->rchild);printf("%c",T->data);}}/*层次遍历*/void r_levelorder(BTree T){ BTree q[1024]; BTree p; int front=0,rear=0; if(T) { q[rear]=T; rear=(rear+1)%M; } while(front!=rear) { p=q[front]; printf("%c ",p->data); if(p->lchild) { q[rear]=p->lchild; rear=(rear+1)%M; } if(p->rchild) { q[rear]=p->rchild; rear=(rear+1)%M; } front = (front+1)%M; }}int main(){BTree T;T=NULL; int select;while(1){printf("
请选择要进行的操作:
");printf(" 1 创建二叉树
");printf(" 2 前序遍历
");printf(" 3 后序遍历
");printf(" 4 层次遍历
");printf(" 5 结束程序
");printf("=========================
");scanf("%d",&select); getchar();switch (select){case 1:{printf("请按前序次序输入各结点的值,以#表示空树(输入时可连续输入)
");creat_BTree(&T);break;}case 2:{if(!T) printf("未建树,请先执行1操作建树!
");else r_preorder(T);break;}case 3:{if(!T) printf("未建树,请先执行1操作建树!
");else r_posorder(T);break;}case 4:{if(!T) printf("未建树,请先执行1操作建树!
");else r_levelorder(T);break;}default:; } }}
只是它构建起这颗二叉树以后按照前序法来创建二叉树,输出的时候要根据你遍历这颗二叉树的方法(前序遍历、中序遍历、后序遍历)来决定输出序列了。
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。
二叉树的遍历的完整代码是什么
二叉树遍历代码 include"iostream.h"include"stdlib.h"include"stdio.h"include<stack> using namespace std;define NULL 0 define OK 1 define OVERFLOW -1 typedef int Status;typedef struct node { char data;struct node *lchild;struct node *rchild;}*bitree;int k=0;int depth(bitree T)...
二叉树的建立和遍历(C++)
void xianbianli(bitnode *T); \/\/先序遍历二叉树 int pd(bitnode *T); \/\/判断是否是完全二叉树 int depth(bitnode *T); \/\/二叉树的深度 \/\/---访问二叉树节点--- void visit(bitnode *T){ cout<<T->data<<ends;return;} \/\/-...
有一棵二叉树的先序和中序遍历分别如下,画出该二叉树(...
有一棵二叉树的先序和中序遍历分别如下,画出该二叉树(...序:A B C D E F G H I J 中序:C B E D A G H F J I 确定根是A,C B E D在A的左子树上,G H F J I在A的右子树上。先序:B C D E 中序:C B E D 确...
二叉树先序遍历算法流程图怎么画,学的是数据结构c语言。
首先要搞明白二叉树的几种遍历方法:(1)、先序遍历法:根左右;(2)、中序遍历法:左根右;(3)、后序遍历法:左右根。其中根:表示根节点;左:表示左子树;右:表示右子树。至于谈到如何画先序遍历的流程图,可以这样考虑:按照递归的算法进行遍历一棵二叉树。程序首先访问根节点,如果根节点...
设二叉树以二叉链表存储,试设计算法,实现二叉树的层序遍历。
按层次遍历算法如下:include <iostream> using namespace std;typedef struct treenode { \/\/树结点结构 int data;struct treenode *left;struct treenode *right;}TreeNode;typedef struct stack{ \/\/栈结点结构 TreeNode *node;struct stack *next;}STACK;void Traversal(TreeNode *root){ STACK *...
二叉树是怎么遍历的?
2、中根遍历一般指中序遍历,在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:(1)中序遍历左子树 (2)访问根结点 (3)中序遍历右子树 如右图所示二叉树,中根遍历结果:DBEAFC 3...
...编一程序能实现先序、中序、后序遍历二叉树并能打印出运行结果...
include <stdlib.h> define STACK_MAX_SIZE 30 define QUEUE_MAX_SIZE 30 ifndef elemType typedef char elemType;endif \/***\/ \/* 以下是关于二叉树操作的11个简单算法 *\/ \/***\/ struct BTreeNode{ elemType data;
根据先序和中序序列生成二叉树
先序遍历:N -> L -> R 中序遍历:L -> N -> R 后序遍历:L -> R -> N 假设现有一颗二叉树如上图所示,上述二叉树的先序遍历和中序遍历结果为:先序遍历:ABCDEF 中序遍历:CBDAEF 分析: 先序遍历服从规则“根左右”,所以,对于一个先序遍历得到的数组,第一个元素一定是根节点...
采用二叉链表作为存储结构,完成二叉树的建立,前序、中序和后序遍历的...
\/\/后序遍历二叉树 void lasTraverse(BiTree T){ if(T==NULL){return;} lasTraverse(T->Lchild);lasTraverse(T->Rchild);printf("%d ",T->data);} \/\/求二叉树的深度 int TreeDeep(BiTree T){ int deep=0;if(T){ int leftdeep=TreeDeep(T->Lchild);int rightdeep=TreeDeep(T->...
c语言 关于二叉树的创建和遍历(中序遍历)
void inorder(BiTNode *BT){\/\/中序遍历二叉树——递归形式 if(BT!=NULL){ inorder(BT->lchild );printf("%c ",BT->data);inorder(BT->rchild );} } void main(){ BiTNode *BT;printf("以广义表形式表示输入的二叉数 (如A(B(C,D),E(,F))的形式)\\n\\n");char string[Number]...
隆耿干彼: scanf("%c",c);修改为 scanf("%c",...
荆州区18386956880: C语言二叉树的遍历. - ?
隆耿干彼: 原发布者:牛达 二叉树就是每个结点最多有两个子树的树形存储结构,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被且只被访问一次.程序的流程图如下:程序代码如下:#include#include#include#...
荆州区18386956880: 编写一个程序实现二叉树的先序中序后序遍历 - ?
隆耿干彼: void prvorder(bitree * t){ //前序遍历 if (t!=Null){ printf("%4d",t->data); prvorder(t->lchild); prvorder(t->rchild); } } void PreOrderUnrec(bitree *t) //先序遍历非递归算法; { bitree *p = t,*Stack[M]; int top = -1; while (p != Null || top != -1) { while (p!=Null) //...
荆州区18386956880: 编写一个算法,实现二叉树的先序遍历 - ?
隆耿干彼: void preorder(BiTree b) { if(b==null) return; visit(b) ; //对b.data访问 前序遍历 preorder(b->LChild); //visit(b);//对b.data访问 中序遍历 preorder(b->LChild); //visit(b);//对b.data访问 后序遍历 } 很简单的给你介绍的思想 具体的要按照你的数据结构稍微改一下 纯手写的哦
荆州区18386956880: java 二叉树前序遍历 - ?
隆耿干彼: //类Node定义二叉树结点的数据结构;//一个结点应包含结点值,左子结点的引用和右子结点的引用 class Node{ public Node left; //左子结点 public Node right; //右子结点 public int value; //结点值 public Node(int val){ value = val; } } public class ...
荆州区18386956880: 二叉树前序遍历法举例!急急急!!! - ?
隆耿干彼: 二叉树的三种金典遍历法1.前序遍历法: 前序遍历(DLR)前序遍历(DLR) 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树.在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树.若二叉树为空则结...
荆州区18386956880: 二叉树的前序遍历是什么意思? - ?
隆耿干彼: 序是根据树根的遍历位置来说的,前序就是先遍历根,后遍历左右子节点 比如这样的树 A / \ B C 根是A,前序遍历就是ABC,中序就是BAC,后序就是BCA,根据A的位置决定
荆州区18386956880: 前序遍历顺序输出二叉树前n层所有结点 - ?
隆耿干彼: 输入先序扩展序列:abd##e##c## 对应的先序序列:a b d e c 对应的二叉树: a / \ b c / \ / \ d e # # / \ / \ # # # # 输入要显示的层数n: 2 a b c#include#include typedef struct Node { char data; struct Node *left; struct Node *right; }Bitree;//用"先序扩...
荆州区18386956880: 二叉树遍历(c语言实现) - ?
隆耿干彼: #include <stdio.h>#include <malloc.h> typedef struct node{ int data; struct node *lchild,*rchild; }*treetp,tree; treetp create (treetp t,int c); void print1(treetp); void print2(treetp); void print3(treetp); int number=0; void main() { treetp t=0,r;r=create (t,0);...
荆州区18386956880: c语言 二叉树的遍历 - ?
隆耿干彼: //---------------------------------------------------------------------------#include<iostream> using namespace std; typedef struct node { struct node *L,*R; string name; }NODE;//输入 void Input(NODE **T,int num) { string name; int L,R; *T = new NODE[num]; for (...