[ LeetCode 589 ] N 叉树的前序遍历

每天分享一个LeetCode题目

每天 5 分钟,一起进步

LeetCode N 叉树的前序遍历,地址: https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/

树结点类

class TreeNode(object):
    def __init__(self, val, children=[]):
        self.val = val
        self.children = children

N 叉树的前序遍历

利用递归,依然遵循「跟左右」的遍历原则

def preorder(self, root):
    print(root.val, end=" ")
    for node in root.children:
        self.preorder(node)

是不是看起来特别简单,但是这样不符合 LeetCode 题目中的要求

需要将结果放到一个数组中,所以需要提前初始化一个 list 进行存放

重新编码看看

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,然后在遍历的时候进赋值操作

完整代码

可直接执行

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

玩的开心呀 ღ( ´・ᴗ・` )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值