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

二叉树的建立和遍历程序代码(Java,C)

2017-08-13 14:58 489 查看
C语言

考虑到c语言的scanf(“%c”,&c)是输入后一个字符一个字符的取出这一特性,我们选择用createBiTree()方法接受输入的参数,然后直接建立。运用递归的方式创建二叉树的数据结构,结束条件为 c==’ ‘;

代码如下:

#include <stdio.h>
#include <stdlib.h>
/*山东科技大学小昝*/
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void createBiTree(BiTree *T){
char c;
scanf("%c",&c);
if(' '==c){
*T = NULL;
}
else{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = c;
createBiTree(&(*T)->lchild);
createBiTree(&(*T)->rchild);
}
}

void visited(char c,int level){
printf("节点 %c 的层数为: %d\n",c,level);
}

void preOrderTraverse(BiTree T , int level){
if(T){
visited(T->data,level);
preOrderTraverse(T->lchild,level+1);
preOrderTraverse(T->rchild,level+1);
}
}

int main(){
int level = 1;
BiTree T  = NULL;
printf("请输入前序序列,空格代表结束:");
createBiTree(&T);
preOrderTraverse(T,level);
return 0;
}


Java代码

因为java是面向对象的,所以我们采用内部类的方式定
4000
义我们二叉树的数据结构,和上面c的代码不同的地方还有再创建对象的时候虽然都用的递归建立,但是Java中我们没有和c语言当中scanf()这样的特性(上边说的),所以我们Java中采用接受一个data值,然后按照“左小右大”的规则,递归添加到以root为根的数据结构中。

代码如下:

package alizantest;
/*山东科技大学小昝*/
public class tree2 {
//声明根结点
static Node root;
//建立节点的数据结构
private class Node{
int data;
Node lchild;
Node rchild;
Node(int data){
this.data = data;//当建立第一个节点的时候,方便初始化
lchild = null;
rchild = null;
}
}

//初始化根
public tree2(){
root = null;
}

//创建树
public void CreateBiTree(Node n,int data){
if(root == null){
root = new Node(data);
}else{
if(data < n.data){
if(n.lchild==null){
n.lchild = new Node(data);
}else{
CreateBiTree(n.lchild,data);
}
}else{
if(n.rchild==null){
n.rchild = new Node(data);
}else{
CreateBiTree(n.rchild,data);
}
}
}
}
//先序遍历
public void preOrder(Node root){
if(root!=null){
visit(root.data);
preOrder(root.lchild);
preOrder(root.rchild);
}
}
//中序遍历
public void middleOrder(Node root){
if(root!=null){
middleOrder(root.lchild);
visit(root.data);
middleOrder(root.rchild);
}
}
//后续遍历
public void forwardOrder(Node root){
if(root!=null){
forwardOrder(root.lchild);
forwardOrder(root.rchild);
visit(root.data);
}
}
//作为先序遍历,中序遍历,后续遍历的访问函数
private void visit(int data) {
// TODO Auto-generated method stub
System.out.print(data+" ");
}

public static void main(String[] args) {
int a[] =  {2,4,12,45,21,6,111};
tree2 t = new tree2();
for(int i = 0;i<a.length;i++){
t.CreateBiTree(t.root, a[i]);
}
t.preOrder(root);
System.out.println();
t.middleOrder(root);
System.out.println();
t.forwardOrder(root);
}
}


我们要学好数据结构和算法,必须从基础做起,对于每一步是怎么执行的,我们都要按部就班的去敲代码理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: