溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。

發布時間:2020-08-21 20:32:42 來源:網絡 閱讀:353 作者:秋笙夏笛 欄目:編程語言


思路:根據前序遍歷依次訪問對應的中序遍歷的節點,分為左子樹和右子樹創建。

#include<iostream>
#include<stdlib.h>

using namespace std;
struct BinaryTreeNode
{
BinaryTreeNode(int _value)
:m_nValue(_value)
,m_pLeft(NULL)
,m_pRight(NULL)
{}
int m_nValue;
struct BinaryTreeNode* m_pLeft;
struct BinaryTreeNode* m_pRight;
};
BinaryTreeNode* Buildtree(int* pre,int* mid,int n)
{
if(n==0)
{
return NULL;
}
int num=pre[0];
BinaryTreeNode* head=new BinaryTreeNode(num);

int i=0;
while(i<n&&mid[i]!=num) //求左子樹的長度
{
i++;
}
int left_len=i; //左子樹的長度
int right_len=n-1-i; //右子樹的長度

if(left_len>0) //構建左子樹
{
head->m_pLeft=Buildtree(&pre[1],&mid[0],left_len);
}
if(right_len>0) //構建右子樹
{
head->m_pRight=Buildtree(&pre[left_len+1],&mid[left_len+1],right_len);
}
return head;
}
void PreOrder(BinaryTreeNode* head)
{
if(head==NULL)
{
return;
}
cout<<head->m_nValue<<"->";
PreOrder(head->m_pLeft);
PreOrder(head->m_pRight);
}
void MidOrder(BinaryTreeNode* head)
{
if(head==NULL)
{
return;
}
MidOrder(head->m_pLeft);
cout<<head->m_nValue<<"->";
MidOrder(head->m_pRight);
}
int main()
{
int pre[]={1,2,4,7,3,5,6,8};
int mid[]={4,7,2,1,5,3,8,6};
BinaryTreeNode* head=Buildtree(pre,mid,8);
PreOrder(head);
cout<<endl;
MidOrder(head);
system("pause");
return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女