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是面向对象的,所以我们采用内部类的方式定义我们二叉树的数据结构,和上面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);
}
}
我们要学好数据结构和算法,必须从基础做起,对于每一步是怎么执行的,我们都要按部就班的去敲代码理解。