题解 | 从中序与后序遍历序列构造二叉树

从中序与后序遍历序列构造二叉树

https://www.nowcoder.com/practice/ab8dde7f01f3440fbbb7993d2411a46b

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param inorder int整型一维数组 中序遍历序列
 * @param inorderLen int inorder数组长度
 * @param postorder int整型一维数组 后序遍历序列
 * @param postorderLen int postorder数组长度
 * @return TreeNode类
 */
#include <stdlib.h>
struct TreeNode* buildTree(int* inorder, int inorderLen, int* postorder, int postorderLen ) {
    // write code here
    if(inorderLen==0){
        return NULL;
    }
    if(inorderLen==1){
        struct TreeNode *root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
        root->val=inorder[0];
        root->left=NULL;
        root->right=NULL;
        return root;
    }
    struct TreeNode *root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val=postorder[postorderLen-1];
    int flag=0;
    int left=0;
    int right=0;
    for(int i=0;i<inorderLen;i++){
        if(inorder[i]!=root->val){
            flag++;
            continue;
        }else{
            break;
        }
    }
    left=flag;
    right=inorderLen-flag-1;
    root->left=buildTree(inorder, left,postorder ,left);
    root->right=buildTree(inorder+left+1, right, postorder+left, right);
    return root;
}

全部评论

相关推荐

谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务