初学二叉树

来源:互联网 发布:股市大数据分析工具 编辑:程序博客网 时间:2024/05/21 06:50

两个版本的由二叉树中序和前序推后序的代码:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 80

typedef struct tnode{
 char item;
 struct tnode *left;
 struct tnode *right;
 }TNODE;
 
TNODE *add_tree(TNODE *root,char inOrder[],char preOrder[]){
 int i,j;
 char inOrder_left[N];
 char inOrder_right[N];
 char preOrder_left[N];
 char preOrder_right[N];
 if(!strlen(inOrder) || !strlen(preOrder)){
  root = NULL;
 }
 else{
    root = (TNODE*)malloc(sizeof(TNODE));
    root->item = preOrder[0];
    for(j=0;inOrder[j] != root->item;j++);
    for(i=0;i<j;i++){
     inOrder_left[i] = inOrder[i];
    }
    inOrder_left[i] = '\0';
    for(i=j+1;inOrder[i];i++){
     inOrder_right[i-j-1] = inOrder[i];
    }
    inOrder_right[i-j-1] = '\0';
    for(i=1;i<=j;i++){
     preOrder_left[i-1] = preOrder[i];
    }
    preOrder_left[i-1] = '\0';
    for(i=j+1;preOrder[i];i++){
     preOrder_right[i-j-1] = preOrder[i];
    }
    preOrder_right[i-j-1] = '\0';
    root->left = add_tree(root->left,inOrder_left,preOrder_left);
    root->right = add_tree(root->right,inOrder_right,preOrder_right);
 }
 return root;
}

void print(TNODE *root){
 if(root){
  print(root->left);
  print(root->right);
  printf("%c", root->item);
 }
}

int main(){
 char preOrder[] = "-+a*b%cd/ef";
   char inOrder[] ="a+b*c%d-e/f";
 TNODE *root;
 root = add_tree(root,inOrder,preOrder);
 print(root);
 getchar();
 return 0;
}



#include <stdio.h>
#include <string.h>

#define size 100
char inorder[size] = "a+b*c^b-e/f";
char postorder[size] = "abcd^*+ef/-";

int find(char c)
{
 int i;
 for (i = 0; inorder[i] != c; i++);
 return i;  
}

void preorder(int in_low, int in_high, int post_low, int post_high)
{
#define left_num (findi - in_low)
#define right_num (in_high - findi)

 int findi;


 if (post_low > post_high) {
  return;
 }
 else {
  putchar(postorder[post_high]);
  findi = find(postorder[post_high]);
  preorder(in_low, findi - 1, post_low, post_low + left_num - 1);
  preorder(findi + 1, in_high, post_high - right_num, post_high - 1);
 }
}

int main()
{
 int N;
 N = strlen(inorder);
 preorder(0, N - 1, 0, N - 1);
 getchar();
 return 0;

}


0 0
原创粉丝点击