이 진 트 리 의 앞 순서, 중간 순서, 뒤 순서 의 실현 (재 귀 와 비 재 귀)
한두 시간 을 썼 으 니 총 결 된 셈 이다. 나중에 쓸 때 꺼 내 라. 만약 잘 쓰 지 못 하면 여러분 이 지적 해 주시 기 바 랍 니 다.
#include
#include
#include
#include
#include
using namespace std;
typedef struct BiTree_Node
{
char data;
struct BiTree_Node *left, *right;
}BiTree_Node;
void CreateBiTree(BiTree_Node **root)
{
char x;
scanf("
%c",&x);
if(x == '#')
*root = NULL;
else
{
*root = (BiTree_Node*)malloc(sizeof(BiTree_Node));
if(*root == NULL)
printf("malloc error
");
(*root)->data = x;
printf("please input %c left child
", x);
CreateBiTree(&((*root)->left));
printf("please input %c right child
", x);
CreateBiTree(&((*root)->right));
}
}
/* */
void PreOrder(BiTree_Node *root)
{
if(root == NULL)
return ;
printf("%c
",root->data);
PreOrder(root->left);
PreOrder(root->right);
}
/* */
void InOrder(BiTree_Node *root)
{
if(root == NULL)
return ;
InOrder(root->left);
printf("%c
",root->data);
InOrder(root->right);
}
/* */
void PostOrder(BiTree_Node *root)
{
if(root == NULL)
return ;
PostOrder(root->left);
PostOrder(root->right);
printf("%c
",root->data);
}
/* */
int Node_Num(BiTree_Node *root)
{
if(root == NULL)
return 0;
else
return 1 + Node_Num(root->left) + Node_Num(root->right);
}
/* */
int depth(BiTree_Node *root)
{
if(root == NULL)
return 0;
int dl = depth(root->left);
int dr = depth(root->right);
return (dl>dr ? dl : dr) + 1;
}
/* */
void PreOrder_nocur(BiTree_Node *root)
{
if(root == NULL)
return;
stack BiTstack;
BiTree_Node *node = (BiTree_Node*)malloc(sizeof(BiTree_Node));
BiTstack.push(root);
while(!BiTstack.empty())
{
node = BiTstack.top();
printf("%c
",node->data);
BiTstack.pop();
if(node->right != NULL)
BiTstack.push(node->right);
if(node->left != NULL)
BiTstack.push(node->left);
}
}
/* */
void InOrder_nocur(BiTree_Node *root)
{
if(root == NULL)
return ;
BiTree_Node *node = root;
/* */
stack BiTstack;
while(node != NULL)
{
BiTstack.push(node);
node = node->left;
}
while(!BiTstack.empty())
{
node = BiTstack.top();
printf("%c
",node->data);
BiTstack.pop();
/* , */
node = node->right;
while(node != NULL)
{
BiTstack.push(node);
node = node->left;
}
}
}
/* ------ */
void PostOrder_nocur(BiTree_Node *root)
{
stack s1, s2;
BiTree_Node *node = root;
s1.push(node);
while(!s1.empty())
{
node = s1.top();
s1.pop();
s2.push(node);
if(node->right != NULL)
s1.push(node->left);
if(node->left != NULL)
s1.push(node->right);
}
while(!s2.empty())
{
node = s2.top();
s2.pop();
printf("%c
",node->data);
}
}
/* */
void level_travel(BiTree_Node *root)
{
BiTree_Node *node;
queue BiTQ;
BiTQ.push(root);
while(!BiTQ.empty())
{
node = BiTQ.front();
BiTQ.pop();
printf("%c
",node->data);
if(node->left != NULL)
BiTQ.push(node);
if(node->right != NULL)
BiTQ.push(node);
}
}
int main()
{
BiTree_Node *root;
int flag = 1;
while(flag){
printf("-----------------0. ---------------------
");
printf("-----------------1. -----------------------
");
printf("-----------------2. -----------------------
");
printf("-----------------3. -----------------------
");
printf("-----------------4. -----------------------
");
printf("-----------------5. -----------------------
");
printf("-----------------6. -----------------------
");
printf("-----------------7. -----------------
");
printf("-----------------8. -----------------
");
printf("-----------------9. -----------------
");
int x, len, num;
scanf("
%d",&x);
switch(x)
{
case 0:printf("please input the root
"); CreateBiTree(&root);break; case 1:PreOrder(root); break;
case 2:InOrder(root); break;
case 3:PostOrder(root);break;
case 4:level_travel(root);break;
case 5:len = depth(root);printf("depth:%d
",len);break;
case 6:num = Node_Num(root);printf("node num:%d
",num);break;
case 7:PreOrder_nocur(root);break;
case 8:InOrder_nocur(root);break;
case 9:PostOrder_nocur(root);break;
default:flag = 0;break;
}
}
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에 따라 라이센스가 부여됩니다.