请问二叉树遍历程序错在哪里?为什么我的Pre()函数运行不下去了?

二叉树遍历程序错在哪里?Pre()函数运行不下去了,求大神解答,谢谢!//
// main.c
// BinTree2
//
// Created by chongyi yang on 9/29/17.
// Copyright © 2017 chongyi yang. All rights reserved.
//

#include <stdio.h>
#include <mm_malloc.h>
#define DEPTH 3
typedef struct node *TNode;
struct node
{
int letter;
TNode left;
TNode right;
};
TNode Create(TNode tree,int depth);
void Pre(TNode tree);
int main()
{
TNode tree;
tree=(TNode)malloc(sizeof(TNode));
tree=Create(tree,DEPTH);
Pre(tree);
return 0;
}

TNode Create(TNode Tree,int depth)
{
TNode t_left,t_right;
//Initialization
t_left=(TNode)malloc(sizeof(TNode));
t_right=(TNode)malloc(sizeof(TNode));
t_left->letter=0;
t_right->letter=0;
t_left->left=NULL;
t_left->right=NULL;
t_right->left=NULL;
t_right->right=NULL;
printf("Type tree's letter:\n");
scanf("%d",&Tree->letter);
//getchar();
Tree->left=t_left;
Tree->right=t_right;
if(Tree)
{
depth--;
if(depth<=0)return NULL;
Create(Tree->left,depth);
Create(Tree->right, depth);
}
return Tree;
}

void Pre(TNode tree)
{
if(tree)
{
printf("%d ",tree->letter);
Pre(tree->left);
Pre(tree->right);
}
return;
}



慕田峪7331174
浏览 183回答 1
1回答

守着星空守着你

您遍历的算法写错了,按照如下写法就可以了。#include<iostream>#include<string>using namespace std;class Node{public:Node(){}~Node(){}public:char data;Node *lchild;Node *rchild;};void creattree(Node *&T){Node *n;n = new Node();cin>>n->data;if(n->data == '#')//如果当前节点为空 不创建{T=NULL;}else//节点非空时 创建该节点n{T = n;creattree(T->lchild);creattree(T->rchild);}}void inOrderTraverse(Node *&T){if (T == NULL) //修改此处增加对空的判断{return;}inOrderTraverse(T->lchild);cout<<T->data; //此处的判断删除inOrderTraverse(T->rchild);}int main(){Node *T=NULL;cout<<"开始创建二叉树:"<<endl;creattree(T);cout<<"以下开始用中序法遍历二叉树:"<<endl;inOrderTraverse(T);cout<<endl;delete T;return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP