题目:
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
示例1:
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
解题代码:
struct TreeNode* buildATree(int* postorder, int* inorder, int len){ if(len == 0) return NULL; // 每次选中后序遍历数组中的最后一个数据作为根节点 int val = postorder[len - 1]; int index = 0; // 找到根节点在中序遍历数组中的位置 while(inorder[index] != val) index++; struct TreeNode* node = malloc(sizeof(struct TreeNode)); node->val = val; // 递归左树 node->left = buildATree(postorder, inorder, index); // 递归右树 node->right = buildATree(postorder + index, inorder + index+1, len - index - 1); return node; } struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize){ return buildATree(postorder, inorder, inorderSize); }
LeetCode 105 从前序与中序遍历序列构造二叉树(C语言 递归)
当思路相同时,就变成了查找边界问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)