简单地二叉树的创建和遍历,有点不会,求指点
#include <stdio.h>#include <stdlib.h>
#include <iostream>
using namespace std ;
typedef struct btnode
{
char val ;
struct btnode *lchild ,*rchild ;
}BTNODE;
BTNODE* create_bt (BTNODE* node )
{
int ch;
//scanf("%c" ,&ch );
cin>>ch;
BTNODE *p ,*head=NULL;//operate
p=node;
p=(BTNODE*)malloc(sizeof(BTNODE));
if('#'==ch)
{
p=NULL;
}
else
{
if(p->val=ch ) head=p;
create_bt(p->lchild);
create_bt(p->rchild);
}
return (head) ;
}
void visit (char val ,int level)
{
printf("%c是%d层\n" ,val ,level);
}
void preorder (BTNODE* node ,int level)
{
BTNODE* p ;
p=node;
if(p)
{
visit(p->val , level );
preorder(p->lchild ,level+1);
preorder(p->rchild ,level+1);
}
}
int main ()
{
int level=0 ;
BTNODE *head;
head=create_bt(NULL);
preorder(head ,level);
return 0;
}
PS:我在创建的时候,不小心创建成了.cpp,所以出现了#inlcude<iostream> using namespace std ;
求大神指点
感觉在create_bt函数里面,出现了问题,但是不知道是怎么回事,求教{:5_109:} #include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct btnode
{
char val ;
struct btnode *lchild ,*rchild ;
}BTNODE, *BiTree;
// 二叉链表--排序树
void Creat( BiTree &bt )
{
char x;
scanf("%c", &x );
if( x == '#' )
{
bt = NULL;
}
else
{
bt = ( BiTree )malloc( sizeof( BTNODE ) );
bt ->val = x;
Creat( bt ->lchild );
Creat( bt ->rchild );
}
}
void visit (char val ,int level)
{
printf("%c是%d层\n" ,val ,level);
}
void preorder (BTNODE* node ,int level)
{
BTNODE* p ;
p=node;
if(p)
{
visit(p->val , level );
preorder(p->lchild ,level+1);
preorder(p->rchild ,level+1);
}
}
int main ()
{
int level=0 ;
BTNODE *head = NULL;
Creat( head );
preorder(head ,level);
return 0;
} HHR 发表于 2014-5-7 22:31 static/image/common/back.gif
大神,好像形参是不可以分配内存的,形参是不能做左值的
不过,思想蛮好的,谢谢 运行了一下前面的程序,但运行不出结果,于是调试了一下,修改程序如下://#include <stdio.h>
//#include <stdlib.h>
#include <iostream>
using namespace std ;
typedef struct btnode
{
char val ;
struct btnode *lchild ,*rchild ;
}BTNODE;
BTNODE* create_bt (BTNODE* node )
{
//int ch;
char ch;
//scanf("%c" ,&ch );
cin>>ch;
//BTNODE *p ,*head=NULL;//operate
//p=node;
//p=(BTNODE*)malloc(sizeof(BTNODE));
if('#'==ch)
{
return NULL;
}
else
{
node=(BTNODE*)malloc(sizeof(BTNODE));
node->val=ch;
node->lchild=create_bt(node->lchild);
node->rchild=create_bt(node->rchild);
//if(p->val=ch ) head=p;
//create_bt(p->lchild);
//create_bt(p->rchild);
}
return (node) ;
}
void visit (char val ,int level)
{
//printf("%c是%d层\n" ,val ,level);
cout<<val<<"是"<<level<<"层"<<endl;
}
void preorder (BTNODE* node ,int level)
{
BTNODE* p ;
p=node;
if(p)
{
visit(p->val , level );
preorder(p->lchild ,level+1);
preorder(p->rchild ,level+1);
}
}
int main ()
{
int level=0 ;
BTNODE *head;
head=create_bt(NULL);
preorder(head ,level);
return 0;
}
elvo 发表于 2014-5-8 11:13 static/image/common/back.gif
运行了一下前面的程序,但运行不出结果,于是调试了一下,修改程序如下:
这样就可以了吗,感觉,还是有点问题呀,不管怎么样,先运行一下再说,谢谢 可以看看的 秦晓彬 发表于 2014-5-7 22:50 static/image/common/back.gif
大神,好像形参是不可以分配内存的,形参是不能做左值的
不过,思想蛮好的,谢谢
左值相当于地址值,右值相当于数据值
&符号放在一个变量声明或者是函数的形参声明前就是引用
如果放在一个已经定义的变量前,就是取地址
。。。 package sun;
import java.util.Scanner;
public class BinaryTree {
private Scanner scanner;
public static void main(String[] args) {
BinaryNode<String> note = new BinaryNode<String>("start", null);
BinaryTree bt = new BinaryTree();
bt.createBiTree(note);
bt.preorderTraversal(note);
}
//创建二叉树
public void createBiTree(BinaryNode<String> node){
createLeftChild(node);
createRightChild(node);
}
public void createLeftChild(BinaryNode<String> node){
System.out.println("Please Input:");
scanner = new Scanner(System.in);
String data = scanner.next();
if(!data.equals("e")){
node.setLeftChild(new BinaryNode<String>(data, node));
createLeftChild(node.getLeftChild());
createRightChild(node.getRightChild());
}
}
public void createRightChild(BinaryNode<String> node){
System.out.println("Please Input:");
scanner = new Scanner(System.in);
String data = (String) scanner.next();
if(!data.equals("e")){
node.setRightChild(new BinaryNode<String>(data, node));
createLeftChild(node);
createRightChild(node);
}
}
//前序遍历二叉树
public void preorderTraversal(BinaryNode<String> node){
System.out.println(node.getData());
if(node.getLeftChild() != null){
preorderTraversal(node.getLeftChild());
}
if(node.getRightChild() != null){
preorderTraversal(node.getRightChild());
}
}
}
页:
[1]