題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
思路:中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點
12 4 7 3 5 6 8
左 4 7 215 3 8 6 右
=》 前序24 7
中序 左 4 72
=》 前序47
中序 左47
=》 前序 7
中序 7
=》 前序 中序 null
左子樹12
4 7
同理可構建右子樹
python/**
* definition for binary tree
* struct treenode
* };
*/class solution
for(int i=0;i1]);
vin_left.push_back(vin[i]);
}for(int i=p_v+1;ileft=reconstructbinarytree(pre_left,vin_left);
head->right=reconstructbinarytree(pre_right,vin_right);
return head;
}};
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution:
# 返回構造的treenode根節點
defreconstructbinarytree
(self, pre, tin):
if len(pre)==0:
return
none
head=treenode(pre[0])
p_t=tin.index(pre[0])
pre_left=pre[1:p_t+1]
pre_right=pre[p_t+1:]
tin_left=tin[:p_t]
tin_right=tin[p_t+1:]
head.left=self.reconstructbinarytree(pre_left, tin_left)
head.right=self.reconstructbinarytree(pre_right, tin_right)
return head
# write code here
劍指offer4 重建二叉樹
給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...
劍指offer 4 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...
劍指offer 4 重建二叉樹
重建二叉樹 include include 重建二叉樹 using namespace std struct treenode static void preorder treenode root cout root val preorder root left preorder root righ...