天天分享一个LeetCode题目node
天天 5 分钟,一块儿进步python
LeetCode N 叉树的前序遍历,地址: leetcode-cn.com/problems/n-…数组
class TreeNode(object):
def __init__(self, val, children=[]):
self.val = val
self.children = children
复制代码
利用递归,依然遵循「跟左右」的遍历原则markdown
def preorder(self, root):
print(root.val, end=" ")
for node in root.children:
self.preorder(node)
复制代码
是否是看起来特别简单,可是这样不符合 LeetCode 题目中的要求app
须要将结果放到一个数组中,因此须要提早初始化一个 list 进行存放oop
从新编码看看ui
def preorder(self, root):
# print(root.val, end=" ")
# for node in root.children:
# self.preorder(node)
res = []
def dfs(root):
if not root:
return
res.append(root.val)
for node in root.children:
dfs(node)
dfs(root)
return res
复制代码
就是提早初始化了 res,而后在遍历的时候进赋值操做编码
可直接执行spa
# -*- coding:utf-8 -*-
# !/usr/bin/env python
# 树结点类
class Node(object):
def __init__(self, val=None, children=[]):
self.val = val
self.children = children
class Solution(object):
def preorder(self, root):
# print(root.val, end=" ")
# for node in root.children:
# self.preorder(node)
res = []
def dfs(root):
if not root:
return
res.append(root.val)
for node in root.children:
dfs(node)
dfs(root)
return res
if __name__ == "__main__":
# 新建节点
root = Node('A')
node_B = Node('B')
node_C = Node('C')
node_D = Node('D')
node_E = Node('E')
node_F = Node('F')
node_G = Node('G')
node_H = Node('H')
node_I = Node('I')
# 构建三叉树
# A
# / | \
# B C D
# /|\ / \
# E F G H I
root.children = [node_B, node_C, node_D]
node_B.children = [node_E, node_F, node_G]
node_D.children = [node_H, node_I]
s = Solution()
print(s.preorder(root))
复制代码
玩的开心呀 ღ( ´・ᴗ・` )code