劍指offer 4 重建二叉樹

2021-08-20 18:21:18 字數 1561 閱讀 7946

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

思路:中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點

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

同理可構建右子樹

/**

* 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;

}};

python

# -*- 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...