題目:已知前序遍歷和中序遍歷,回傳樹的根節點(代碼編譯時對的,但是沒有輸出根節點的值)
代碼:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
struct BinaryTreeNode
{ int m_nvalue;
BinaryTreeNode * m_pLeft;
BinaryTreeNode * m_pRight;
};
BinaryTreeNode * Rebuild(int *preorder,int *inorder,int num) //num是樹的總節點數
{ int *a=preorder;
int *b=inorder;
int now= -1;
BinaryTreeNode *Head=new BinaryTreeNode();
Head->m_nvalue=https://bbs.csdn.net/topics/*a;
Head->m_pLeft=NULL;
Head->m_pRight=NULL;
for(int i=0;i<num;i++)
if(b[i]==*a) i=now; //now是根節點所在下標,因此左子樹節點數為now,右子樹節點數為num-now-1
if(now>0) Head->m_pLeft=Rebuild(a,b,now);
if((num-now-1)>0) Head->m_pRight=Rebuild(a+now+1,b+now+1,num-now-1);
return Head;
}
void main()
{ int preorder[]={1,2,4,7,3,5,6,8};
int inorder[]={4,7,2,1,5,3,8,6};
BinaryTreeNode *H=new BinaryTreeNode();
H= Rebuild(preorder,inorder,8);
cout<<(H->m_nvalue)<<endl;
system("pause");
}
uj5u.com熱心網友回復:
前序遍歷的第一個數是不是就是樹的根節點呀uj5u.com熱心網友回復:
前序遍歷的第一個節點就是樹的根節點,因為我用根節點來測驗建樹有沒有成功,也可以用別的節點來測驗,題目主要是要把樹建起來,害轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72852.html
標籤:新手樂園
