特定深度节点链表
题目描述 算法思想
解决该问题,有一种方法可以采用树的层次遍历,这里介绍一种深搜的思想,大佬的链接在最下方。 1、首先,需要建立一个全局列表,边深搜边构建。
2、处理节点,首先判断列表的长度是否等于,当前层数,如果等于,则表明当前层数中还没有节点插入到该列表当中,所以直接将当前节点插入列表,然后继续访问其左右子树。
3、如果处理的该节点,其层数不等于该全局列表的长度,则表明该层已经有节点差人到列表中了,则只需将该节点也插入当对应层数的列表即可(我有点不懂,为什么先遍历右子树就可以过,但是先遍历左子树,就会出出现有节点漏了的情况)
4、最后返回列表。
代码实现
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def listOfDepth(self, root: TreeNode) -> List[ListNode]: ans = [] def dfs(node, level): if not node: return None if len(ans) == level: ans.append(ListNode(node.val)) else: head = ListNode(node.val) head.next = ans[level] ans[level] = head dfs(node.right, level + 1) dfs(node.left, level + 1) dfs(root, 0) return ans出处
作者:fe-lucifer 链接:https://leetcode-cn.com/problems/list-of-depth-lcci/solution/mian-shi-ti-0403-te-ding-shen-du-jie-dian-lian-b-2/ 来源:力扣(LeetCode)