第三題:輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。
思路:始終從列表的第一項插入資料。
# -*- 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...