重建二叉树
不写了,写了这么久没保存,网速太慢了。
已知二叉树的前序遍历和中序遍历的结果,重建二叉树。
1 node pre_order[5]={'a','b','d','c','e'}; 2 char in_order[5]= {'d','b','a','e','c'}; 3 node rebuild[5]; 4 void rebuild_tree(char pre_order[],char in_order[],node rebuild[],int size) 5 { 6 rebuild->m_value=*pre_order; 7 rebuild->m_lefttree=NULL; 8 rebuild->m_righttree=NULL; 9 char* p=in_order; 10 int left_size=0; 11 while (left_size<size&&*p++!=*pre_order) 12 { 13 ++left_size; 14 } 15 ASSERT(left_size<size); 16 int right_size=size-left_size-1; 17 if (left_size) 18 { 19 rebuild->m_lefttree=rebuild+1; 20 rebuild_tree(pre_order+1,in_order,rebuild+1,left_size); 21 } 22 if (right_size) 23 { 24 rebuild->m_righttree=rebuild+left_size+1; 25 rebuild_tree(pre_order+left_size+1,in_order+left_size+1,rebuild+left_size+1,right_size); 26 } 27 }
浙公网安备 33010602011771号