?LeetCode刷題實(shí)戰(zhàn)105:從前序與中序遍歷序列構(gòu)造二叉樹(shù)
算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !
今天和大家聊的問(wèn)題叫做?從前序與中序遍歷序列構(gòu)造二叉樹(shù),我們先來(lái)看題面:
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
題意

解題
class?Solution?{
????public?TreeNode buildTree(int[] preorder, int[] inorder) {
??????????if(preorder.length>0) {
?????????????TreeNode root =new?TreeNode(preorder[0]);
?????????????Listorder=new?ArrayList ();
?????????????for(int?i=0;i?????????????????order.add(inorder[i]);
?????????????}
?????????????getTree(preorder,0,order,root);
?????????????return?root;
?????????} else?{
?????????????return?null;
?????????}
????}
????
????public?void?getTree(int[]preorder ,int?number,Listorder,TreeNode root ) {
????????if(order.size()==1) {
????????????return?;
????????}
????????
????????int?ordernum=order.indexOf(preorder[number]);
????????if(ordernum>0) {
????????ListleftOrder=new?ArrayList (order.subList(0, ordernum));
????????for(int?i=number+1;i????????{
????????????if(leftOrder.contains(preorder[i])) {
????????????????root.left=new?TreeNode(preorder[i]);
????????????????getTree(preorder,i,leftOrder,root.left);
????????????????break;
????????????}
????????????
?????????}
????????}
????????
????????if(ordernum-1)
????????{
????????????ListrightOrder=new?ArrayList (order.subList(ordernum+1, order.size()));
????????????for(int?j=number+1;j????????????????if(rightOrder.contains(preorder[j])) {
????????????????????root.right=new?TreeNode(preorder[j]);
????????????????????getTree(preorder,j,rightOrder,root.right);
????????????????????break;
????????????????}
????????????}
????????}
???????
????}
}
上期推文:
