0
点赞
收藏
分享

微信扫一扫

【二叉树】二叉树中的列表


0x00 题目

给你一棵以 ​​root ​​​为根的二叉树
和一个 ​​​head​​ 为第一个节点的链表

如果在二叉树中,存在一条一直​​向下​​​的路径
且​​​每个点​​​的数值恰好一一对应以 ​​head​​​ 为首的
链表中每个节点的值,那么请你返回 ​​​True​​​ ,否则返回 ​​False​

一直向下的路径的意思是:
从树中某个节点开始,一直连续向下的路径

0x01 思路

枚举二叉树中的​​每个​​​节点
为​​​起点​​​往下的路径
是否有与链表相​​​匹配​​的路径

0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}

解法:

func isSubPath(_ head: ListNode?, _ root: TreeNode?) -> Bool {
func dfs(_ head: ListNode?, _ root: TreeNode?) -> Bool {
// 链表已经全部匹配完
if head == nil { return true }

// 二叉树访问到了空节点
if root == nil { return false }

// 值不相等
if head!.val != root!.val { return false }

// 值相等,继续递归匹配
return dfs(head!.next, root!.left) || dfs(head!.next, root!.right)
}

guard let root = root else { return false }
// 判断根节点
let b1 = dfs(head, root)

// 判断子节点
let b2 = isSubPath(head, root.left)
let b3 = isSubPath(head, root.right)

return b1 || b2 || b3
}

0x03 我的小作品

欢迎体验我的作品之一:​​小五笔 86 版​​​ 五笔学习好帮手!
​App Store​​ 搜索即可~


举报

相关推荐

0 条评论