[解题报告]Linked List in Binary Tree

题目链接
给定一棵二叉树
给定一个链表
问是否能按照某种访问顺序使得该访问顺序与链表完全相等
上述访问顺序遵循以下规则

  • 访问树节点
  • 访问树的左孩子或右孩子

先序检查每个二叉树节点
检查即检查以该节点为头,子节点序列是否存在与链表相等的序列
若树有N个节点,链表有M个节点
时间复杂度
O(M * N)

func isSubPath(head *ListNode, root *TreeNode) (ans bool) {
	ans = false
	var search func(treeNode *TreeNode, listNode *ListNode)
	search = func(treeNode *TreeNode, listNode *ListNode) {
		if ans {
			return
		}

		if listNode == nil {
			ans = true
			return
		}

		if treeNode == nil {
			return
		}

		if treeNode.Val == listNode.Val {
			search(treeNode.Left, listNode.Next)
			search(treeNode.Right, listNode.Next)
		}
	}

	var dfs func(treeNode *TreeNode)
	dfs = func(treeNode *TreeNode) {
		if ans || treeNode == nil {
			return
		}

		search(treeNode, head)

		dfs(treeNode.Left)
		dfs(treeNode.Right)
	}

	dfs(root)
	return
}
发布了15 篇原创文章 · 获赞 2 · 访问量 1345

猜你喜欢

转载自blog.csdn.net/yeehok/article/details/104878435