二叉樹的前中後序遍歷

ych9527發表於2021-01-02

1.題目

給你二叉樹的根節點 root ,返回它節點值的 前序,中序,後序 遍歷。

前序題目連結
中序題目連結
後序題目連結

這三種遍歷的思想是一樣的,只不過是前後順序的差別而已,下面將以前序為例進行一下介紹,其餘的會給出程式碼;

2.前序解法

2.1獲得元素個數

在這裡插入圖片描述

int GetSize(struct TreeNode* root)//獲得元素的個數
 {
     if(root==NULL)
     return 0;
     return GetSize(root->left)+GetSize(root->right)+1;//左節點+右節點+1
 }

2.2填入資料

在這裡插入圖片描述

2.3整體程式碼

int GetSize(struct TreeNode* root)//獲得元素的個數
 {
     if(root==NULL)
     return 0;
     return GetSize(root->left)+GetSize(root->right)+1;//左節點+右節點+1
 }
void Traversal(int *arr,struct TreeNode* root,int *count)//遍歷往陣列裡面填入資料
 {
     if(root!=NULL)
     {
         arr[*count]=root->val;//填入根節點
         (*count)++;
        Traversal(arr,root->left,count);
        Traversal(arr,root->right,count);//填入右節點
     }
 }
int* preorderTraversal(struct TreeNode* root, int* returnSize){
    int size=GetSize(root);
    int *arr=(int *)malloc(sizeof(int)*size);
    
    int count=0;
    Traversal(arr,root,&count);//注意傳地址進去
    
    *returnSize=count;
    return arr;
}

3.中序

解題思想都是一樣的

int GetSize(struct TreeNode* root)
{
    if(root==NULL)
    return 0;
    return GetSize(root->left)+GetSize(root->right)+1;
}
void  Traversal(int *arr,struct TreeNode* root,int *count)
{
    if(root)
    { 
        //先賦值左孩子然後根節點再右孩子節點
        Traversal(arr,root->left,count);
        arr[(*count)++]=root->val;
        Traversal(arr,root->right,count);
    }
}

int* inorderTraversal(struct TreeNode* root, int* returnSize){
    int size=GetSize(root);
    int *arr=(int *)malloc(sizeof(int)*size);

    int count=0;
    Traversal(arr,root,&count);
    
    *returnSize=count;
    return arr;

}

4.後序

 int GetSize(struct TreeNode* root)
{
    if(root==NULL)
    return 0;
    return GetSize(root->left)+GetSize(root->right)+1;
}

void Traversal(int *arr,struct TreeNode* root,int *count)
{
    //先左再右再根
    if(root)
    {
        Traversal(arr,root->left,count);
        Traversal(arr,root->right,count);
        arr[(*count)++]=root->val;
    }
}

int* postorderTraversal(struct TreeNode* root, int* returnSize){
    int size=GetSize(root);
    int *arr=(int *)malloc(sizeof(int)*size);

        int count=0;
        Traversal(arr,root,&count);

        *returnSize=count;
        return arr;
}

相關文章