劍指Offer第三第四道題

2021-08-17 16:21:33 字數 1577 閱讀 5068

第三題:輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

思路:始終從列表的第一項插入資料。

# -*- coding:utf-8 -*-

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution:

# 返回從尾部到頭部的列表值序列,例如[1,2,3]

defprintlistfromtailtohead

(self, listnode):

# write code here

list1 =

head = listnode

while head:

list1.insert(0,head.val)

head = head.next

return list1

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

前序遍歷:就是先遍歷根節點,中序遍歷:就是根據左根右的順序遍歷二叉樹。

因此我們先獲取前序遍歷的第乙個節點,這個節點就是根節點。然後從中序遍歷中查詢這個節點,並且返回節點的位置,左邊的部分就為左子樹,而右邊的部分則為右子樹的部分。如此迭代的找下去。

# -*- 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):

# write code here

if len(pre)==0:

return

none

elif len(pre)==1:

return treenode(pre[0])

else:

head = treenode(pre[0])

tin_lsec = tin[0:tin.index(pre[0])+1]

tin_rsec = tin[tin.index(pre[0])+1:]

pre_lsec = pre[1:tin.index(pre[0])+1]

pre_rsec = pre[tin.index(pre[0])+1:]

head.left = self.reconstructbinarytree(pre_lsec,tin_lsec)

head.right = self.reconstructbinarytree(pre_rsec,tin_rsec)

return head

劍指offer第四題

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。通過root結點可以把中序遍歷分成兩部分。可以知道左子樹的個數和右子樹的個數。從而求出前序遍歷和中序遍歷相對應的左子樹和右子樹。並通...

4 劍指offer第四題(python)

問題 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。coding utf 8 class treenode def init self,x self.val x self.lef...

劍指offer leetcode 第四題

輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 輸入 head 1,3,2 輸出 2,3,1 definition for singly linked list.public class listnode class solution stack.push temp.val tem...