您的位置:首页 > 编程语言 > Java开发

二叉树的创建和遍历(C版和java版)

2016-12-17 18:05 351 查看
以这颗树为例:#表示空节点
前序遍历(根->左->右)为:ABD##E##C#F##

中序遍历(左->根->右)为:#D#B#E#A#C#F#

后序遍历(左->右->根)为:##D##EB###FCA

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;void ForEachTree(BiTree T)
{
if(T == NULL){
return;
}
// printf(" %c ",T->data);前序遍历
ForEachTree(T->lchild);
printf(" %c ",T->data);//中序遍历
ForEachTree(T->rchild);
// printf(" %c ",T->data);后序遍历
}void CreateBiTree(BiTree *T)
{
TElemType ch;
scanf("%c",&ch);
if('#' == ch){
*T = NULL;
}else{
*T = (BiTree)malloc(sizeof(BiTNode));(*T)->data = ch;
CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}
}
void main(){
//前序创建树,中序输出树
BiTree T;//根节点
CreateBiTree(&T);ForEachTree(T);}
java版本实现:由于java没有c的指针,所以相对于c来说实现起来比较别扭,但思路没问题在java中,不管这个节点是不是空节点,都会申请空间,只不过这个节点的数据、左子树、右子树都是null,但这个节点不是null,如下图
public class BiThrTree {public void createTree(BiThrNode T){
String str;
str = new Scanner(System.in).next();
if("#".equals(str)){
//如果是'#',则不做任何处理,也就是说这个节点的数据、左孩子、右孩子都是null
//但这个节点不是null,这里需要注意
}else{
T.data = str;//给节点赋值T.lchild = new BiThrNode();
T.rchild = new BiThrNode();
createTree(T.lchild);
createTree(T.rchild);}
}
public void forEachTree(BiThrNode T){
if(T.data == null){//判断这个节点的数据是否为空
return;
}
forEachTree(T.lchild);
forEachTree(T.rchild);
System.out.print(T.data);//后序遍历}
public static void main(String[] args) {
BiThrNode T = new BiThrNode();
new BiThrTree().createTree(T);
new BiThrTree().forEachTree(T);}}class BiThrNode{
String data;
BiThrNode lchild;
BiThrNode rchild;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: