提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、方法步骤
示例:1.先进行根节的的确定
2.对左右的节点个数进行确认
3.在对左右子树进行前中序的的遍历
4.得到结果后进行树的构建
二、代码示例
代码如下(示例):
/**
-
Definition for a binary tree node.
-
public class TreeNode {
-
int val;
-
TreeNode left;
-
TreeNode right;
-
TreeNode() {}
-
TreeNode(int val) { this.val = val; }
-
TreeNode(int val, TreeNode left, TreeNode right) {
-
this.val = val;
-
this.left = left;
-
this.right = right;
-
}
-
}
*/
class Solution {
private List arrayToList(int[] array) {
List list = new ArrayList<>();
for (int e : array) {
list.add(e);
}
return list;
}public TreeNode buildTree(int[] preorder, int[] inorder) {
ListarrayPreorder=arrayToList(preorder);
ListarrayInorder=arrayToList(inorder);
return buildTree2(arrayPreorder,arrayInorder);
}
private TreeNode buildTree2(List preorder,Listinorder){
if (preorder.size() == 0) {
return null;
}
//找到根节点
int rootVal=preorder.get(0);
//左子树的节点个数
int leftSize=inorder.indexOf(rootVal);
//求出左子树的前、中序
Listleftproder=preorder.subList(1,1+leftSize);
Listleftinorder=inorder.subList(0,leftSize);
//求出右子树的前、中序
ListrightProder=preorder.subList(1+leftSize,preorder.size());
ListrightInoder=inorder.subList(leftSize+1,inorder.size());
TreeNode left=buildTree2(leftproder,leftinorder);
TreeNode right=buildTree2(rightProder,rightInoder);
TreeNode root=new TreeNode(rootVal);
root.right=right;
root.left=left;
return root;
}
}
`
总结
提示:该方式比较的暴力,要耗费大量的运行时间