#include<iostream>
#include<stdlib.h>
using namespace std;
#define LEN 30
typedef struct TreeNode{
int data;
TreeNode *LChild;
TreeNode *RChild;
}TreeNode;
TreeNode *init(int *init_arr,int lens){
TreeNode *TreeArr[LEN];
int i;
for(i=0;i<lens;i++){
if(init_arr[i]!=0){
TreeArr[i]=(TreeNode *)malloc(sizeof(TreeNode));
TreeArr[i]->data=init_arr[i];
TreeArr[i]->LChild=NULL;
TreeArr[i]->RChild=NULL;
}else TreeArr[i]=NULL;
}
int len=lens/2;
for(i=0;i<len;i++){
if(TreeArr[i]!=NULL){
TreeArr[i]->LChild=TreeArr[2*i+1];
TreeArr[i]->RChild=TreeArr[2*i+2];
}
}
return TreeArr[0];
}
void PreOrder(TreeNode *head){
if(head!=NULL){
cout<<head->data<<" ";
PreOrder(head->LChild);
PreOrder(head->RChild);
}
}
void InOrder(TreeNode *head){
if(head!=NULL){
InOrder(head->LChild);
cout<<head->data<<" ";
InOrder(head->RChild);
}
}
void PostOrder(TreeNode *head){
if(head!=NULL){
PostOrder(head->LChild);
PostOrder(head->RChild);
cout<<head->data<<" ";
}
}
void print_leaf_node(TreeNode *root){
if(root!=NULL){
if(root->LChild==NULL&&root->RChild==NULL)cout<<root->data<<" ";
print_leaf_node(root->LChild);
print_leaf_node(root->RChild);
}
}
int Leaf_count=0;
void leaf_num1(TreeNode *root){
if(root!=NULL){
leaf_num1(root->LChild);
leaf_num1(root->RChild);
if(root->LChild==NULL&&root->RChild==NULL)Leaf_count++;
}
}
int leaf_num2(TreeNode *root){
if(root==NULL){
return 0;
}else if(root->LChild==NULL&&root->RChild==NULL){
return 1;
}else{
return (leaf_num2(root->LChild)+leaf_num2(root->RChild));
}
}
int depth=0;
void Pre_tree_depth(TreeNode * head, int h){
if(head!=NULL){
if(h>depth)depth=h;
Pre_tree_depth(head->LChild,h+1);
Pre_tree_depth(head->RChild,h+1);
}
}
int main(int argc, char const *argv[])
{
TreeNode *head=(TreeNode *)malloc(sizeof(TreeNode));
int init_arr[]={1,2,3,0,4,0,5};
head=init(init_arr,7);
PreOrder(head);
cout<<endl;
return 0;
}