大家好
哈哈哈
谢谢
测测
- 好好好
- 急急急
- 还可以不
#include <stdio.h> #include<malloc.h> #include<queue> #include<stack> using namespace std; typedef struct LNode{ int data; struct LNode *lchild, *rchild; }; //层序创建二叉树 struct LNode* creat(int a[],int n) { if(n==0) return NULL; queue<LNode*> q; LNode *root=(LNode*)malloc(sizeof(LNode)); root->data=a[0]; root->lchild=NULL; root->rchild=NULL; q.push(root); for(int i=1;i<n;i=i+2) { LNode *p=q.front(); q.pop(); if(a[i]!=-1) { LNode *l=(LNode*)malloc(sizeof(LNode)); l->data=a[i]; l->lchild=NULL; l->rchild=NULL; p->lchild=l; q.push(l); } if(a[i+1]!=-1&&i+1<n) { LNode *r=(LNode*)malloc(sizeof(LNode)); r->data=a[i+1]; r->lchild=NULL; r->rchild=NULL; p->rchild=r; q.push(r); } } return root; } //先序遍历二叉树递归 void xianxu(LNode *root) { if(root==NULL) return ; printf("%d ",root->data); xianxu(root->lchild); xianxu(root->rchild); } //中序遍历二叉树递归 void zhongxu(LNode *root) { if(root==NULL) return ; zhongxu(root->lchild); printf("%d ",root->data); zhongxu(root->rchild); } //后序遍历二叉树递归 void houxu(LNode *root) { if(root==NULL) return ; houxu(root->lchild); houxu(root->rchild); printf("%d ",root->data); } //先序遍历 非递归 void feixianxu(LNode *root) { stack<LNode *> s; s.push(root); while(!s.empty()) { LNode *p=s.top(); s.pop(); printf("%d ",p->data); if(p->rchild) s.push(p->rchild); if(p->lchild) s.push(p->lchild); } } //中序遍历 非递归 void feizhongxu(LNode *root) { stack<LNode *> s; LNode *p=root; while(p||!s.empty()) { if(p) { s.push(p); p=p->lchild; }else { p=s.top(); s.pop(); printf("%d ",p->data); p=p->rchild; } } } int main() { //int a[7]={1,2,3,4,5,6,7}; int a[15]={38,22,49,17,34,47,55,-1,-1,-1,35,-1,48,50,56};//-1表示为空 LNode *root=creat(a,15); printf("先序遍历:\n"); xianxu(root); printf("\n先序遍历(非递归):\n"); feixianxu(root); printf("\n中序遍历:\n"); zhongxu(root); printf("\n中序遍历(非递归):\n"); feizhongxu(root); printf("\n后序遍历:\n"); houxu(root); }