1. 程式人生 > >遞迴實現先序輸入構建樹

遞迴實現先序輸入構建樹

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

//定義樹節點的結構
typedef struct Node
{
        char data;
        struct Node *left, *right;
}TNode, *TreeNode;


int i = -1;
//通過先序輸入建立二叉樹,然後通過中序遍歷輸出,使用二級指標
void InitTree(TreeNode *Tr,char* arr){
				i++;
                if(arr[i] != '\0'){
						
                        if(arr[i] != '#'){
                                //分配記憶體
                                if(((*Tr) = (TreeNode)malloc(sizeof(TNode))) == NULL){
                                        exit(0);
                                }else{
                                        (*Tr) ->data = arr[i];
										(*Tr)->left = NULL;									
										(*Tr)->right = NULL;									
                                        InitTree(&((*Tr)->left),arr);
										
                                        InitTree(&((*Tr)->right),arr);  
									
                                }
                        }else{
                                (*Tr) = NULL;
                        }
                         
                }
  

}

//中序列印
void Middle_Search(TreeNode head){
        if(head){
                Middle_Search(head->left);
                printf("%c",head ->data);
                Middle_Search(head->right);
        }
}

int main(){
        char* arr = "5#6##";
	
        TreeNode head= NULL;
        InitTree(&head,arr);
        Middle_Search(head);
		printf("\n");
        return 0;

}

結果: