二叉树链表表示

来源:互联网 发布:股票大宗交易数据查询 编辑:程序博客网 时间:2024/04/27 22:06

#include <stdio.h>
#include <stdlib.h>

struct tree{
 struct tree *left;
 struct tree *right; 
 int data;
};
typedef struct tree treenode;
typedef treenode* b_tree;
b_tree insert_node(b_tree root, int node);  //插入二叉树的节点
b_tree create_btree(int *data, int len);  //建立二叉树
void print_tree(b_tree root);     //打印二叉树

int  main(){
 b_tree root;

 int i, index;
 int value;
 int nodelist[20];       

 printf_s("\n Please input the elements of binary tree(Exit for 0): \n");
 index =0 ;  

 //读取数值到数组中
 scanf_s("%d", &value);

 while(value != 0){
  nodelist[index] = value;
  index ++;
  scanf_s("%d", &value);
 }
 
 for(i=0; i<index; i++)
  printf_s("%d ", nodelist[i]);
 //建立二叉树
 root = create_btree(nodelist, index);

 //打印二叉树节点内容
 print_tree(root);
 return 0;
}

b_tree insert_node(b_tree root, int node){
 b_tree newnode;     //声明树根指针
 b_tree currentnode;    //声明目前节点指针
 b_tree parentnode;    //声明父节点指针

 //建立新节点的内存空间
 newnode = (b_tree) malloc(sizeof(treenode));

 newnode->data = node;   //存放节点内容
 newnode->left = NULL;   //设置左指针初值
 newnode->right = NULL;   //设置右指针初值

 if(root == NULL)
  return newnode;    //返回新节点的位置
 else{
  currentnode = root;   //存储目前节点指针
  while(currentnode != NULL){
   parentnode = currentnode; //存储父节点指针
   if(currentnode->data > node) //比较节点值的数值大小
    currentnode = currentnode->left; //左子树
   else
    currentnode = currentnode->right; //右子树
  }
  if(parentnode->data < node)
   parentnode->right = newnode;
  else
   parentnode->left = newnode;
 }
 return root;
}

b_tree create_btree(int *data, int len){
 b_tree root = NULL;     //树根节点指针
 int i;

 for(i=0; i<len; i++)
  root = insert_node(root, data[i]);

 return root;
}

void print_tree(b_tree root){
 b_tree pointer;

 pointer = root->left;
 printf_s("\nPrint left_subtree node of root: \n");
 
 while(pointer != NULL){
  printf_s("[%2d]\n", pointer->data);  //打印节点内容
  pointer = pointer->left;
 }

 pointer = root->right;
 printf_s("Print right_subtree node of root: \n");
 while(pointer != NULL){
  printf_s("[%2d]\n", pointer->data);
  pointer = pointer->right;
 }
}

0 0
原创粉丝点击