1. 程式人生 > 實用技巧 >面試演算法題

面試演算法題

"""假設前端同學通過介面向後端傳了天貓的行業資訊,例如:
industry_list = [
{
"parent_ind" : "女裝",
"name" : "連衣裙"
},
{
"name": "女裝"
},
{
"parent_ind" : "女裝",
"name" : "半身裙"
},
{
"parent_ind" : "女裝",
"name" : "A字裙"
},
{
"name": "數碼"
},
{
"parent_ind" : "數碼",
"name": "電腦配件"
},
{
"parent_ind" : "電腦配件",
"name": "記憶體"
},
]

為了取用方便,我們希望可以將其轉換為樹狀格式,例如:
{
"數碼": {
"電腦配件": {
"記憶體" : {}
}
},
"女裝" : {
"連衣裙": {},
"半身裙": {},
"A字裙": {}
}
}
實現一個方法完成這個轉換,時間複雜度請控制在O(n)
""" def convert_format(data): tree_dict = {} dict1 = {} # 所有key for item_dic in data: name = item_dic.get("name") parent = item_dic.get("parent_ind") son_dic = {name: {}} if not parent: dict1[name] = tree_dict.setdefault(name, {}) else
: if tree_dict.get(parent) == None and dict1.get(parent) == None: tree_dict[parent] = son_dic dict1.update(son_dic) dict1.setdefault(parent, {}).update(son_dic) return tree_dict

二叉樹廣度優先遍歷,和其變種“Z“字遍歷

# 定義一個樹節點
class TreeNode:
    def
__init__(self, value=None, left=None, right=None): self.value = value self.left = left # 左子樹 self.right = right # 右子樹 # 例項化一個樹節點 node1 = TreeNode("A", TreeNode("B", TreeNode("D", TreeNode("H")), TreeNode("E", TreeNode("I")) ), TreeNode("C", TreeNode("F"), TreeNode("G") ) ) def levelOrder(tree): if tree is None: return [] q = [] q.append(tree) while len(q) != 0: for i in range(len(q)): r = q.pop(0) if r.left is not None: q.append(r.left) if r.right is not None: q.append(r.right) print(r.value) def leve10der_z(node): # z字遍歷 if node is None: return [] q = [] q.append(node) num = 0 # 控制同層節點遍歷方向 s = '' while len(q) != 0: num += 1 print(num) lenght = len(q) s_item = '' for i in range(lenght): # 控制同層節點遍歷方向 r = q.pop(0) if r.left is not None: # 非空左孩子入隊 q.append(r.left) if r.right is not None: # 非空右孩子入隊 q.append(r.right) s_item = s_item + r.value if num % 2 == 0: s_item = s_item[::-1] s = s + s_item print(s) if __name__ == "__main__": # levelOrder(node1) leve10der_z(node1)