[꼭대기] 데이터 구조의 이 진 트 리 의 구조 와 옮 겨 다 니 기 (선서, 중 서, 후 서, 차원)
2718 단어 데이터 구조
// .cpp : 。
//
#include "stdafx.h"
#include <iostream>
#define maxSize 10
using namespace std;
typedef struct BinaryTreeNode
{
char data;
BinaryTreeNode * leftChild;
BinaryTreeNode * rightChild;
}Node;
//
void MakeBinaryTree(Node** root, char* preOrder, char* midOrder, int length)
{
if (length == 0)
{
(*root) = NULL;
return;
}
(*root) = new Node;
(*root)->data = *preOrder;
char * rootplace = strchr(midOrder, (*root)->data);
if (rootplace == NULL)
{
cout <<"input wrong order sample!"<<endl;
}
int leftTreeLength = strlen(midOrder) - strlen(rootplace);
int rightTreeLength = length - leftTreeLength - 1;
MakeBinaryTree(&(*root)->leftChild, preOrder+1, midOrder, leftTreeLength);
MakeBinaryTree(&(*root)->rightChild, preOrder+leftTreeLength+1, rootplace+1, rightTreeLength);
}
void PostTraverse(Node* root)
{
if (root == NULL)
return;
PostTraverse(root->leftChild);
PostTraverse(root->rightChild);
cout << root->data;
}
void visit(Node *p)
{
printf("%c ",p->data);
}
//
void preOrder(Node *p)
{
if(p==NULL)
return;
visit(p);
preOrder(p->leftChild);
preOrder(p->rightChild);
}
//
void inOrder(Node *p)
{
if(p==NULL)
return;
inOrder(p->leftChild);
visit(p);
inOrder(p->rightChild);
}
//
void postOrder(Node *p)
{
if(p==NULL)
return;
postOrder(p->leftChild);
postOrder(p->rightChild);
visit(p);
}
//
typedef struct
{
Node *data[maxSize];
int front;
int rear;
}SqQueue;
void level(Node *&p)
{
Node *q;
SqQueue qu;
qu.front=qu.rear=0;
qu.rear=(qu.rear+1)%maxSize;
qu.data[qu.rear]=p;//
while(qu.front!=qu.rear)
{
qu.front=(qu.front+1)%maxSize;
q=qu.data[qu.front]; //
visit(q);
if(q->leftChild!=NULL)
{
qu.rear=(qu.rear+1)%maxSize;
qu.data[qu.rear]=q->leftChild;//
}
if(q->rightChild!=NULL)
{
qu.rear=(qu.rear+1)%maxSize;
qu.data[qu.rear]=q->rightChild;//
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char pre[] = "abdeijcfg";
char mid[] = "dbiejafcg"; //"bdeijafcg" "dijebfgca"
Node* r;
MakeBinaryTree(&r, pre, mid, strlen(pre));//
printf(" :");
preOrder(r);
printf("
:");
inOrder(r);
printf("
:");
postOrder(r);
printf("
:");
level(r);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.