今天本来准备优化下中序前序构造二叉树的代码,结果死磕了两小时没搞定,感觉才优化一半。先上一版吧,明天接着搞。
题目介绍
题目就简单介绍下,给定两个数组,一个是中序遍历后的输出结果,一个是前序遍历的输出结果。需要根据两个数组构造二叉树。
实现思路
目前思路有点乱,明天优化完再补充吧。
实现代码
代码逻辑是对的,不过实现还需再次优化下。
public class SolutionConsturtFromPreorderAndInorder {
private int tag;
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.tag = 0;
return buildTree(preorder, inorder, 0, preorder.length);
}
private TreeNode buildTree(int[] preorder, int[] inorder, int lo, int hi) {
if (lo > hi) {
return null;
}
TreeNode node = null;
for (int i = lo; i <= hi; ++i) {
if (inorder[i] == preorder[tag]) {
node = new TreeNode(preorder[tag++]); //字数根节点
node.left = buildTree(preorder, inorder, lo, i - 1);
node.right = buildTree(preorder, inorder, i + 1, hi);
break;
}
}
return node;
}
}
算法相关实现源码地址:https://github.com/xiekq/rubs-algorithms
网友评论