博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法:树问题
阅读量:4060 次
发布时间:2019-05-25

本文共 587 字,大约阅读时间需要 1 分钟。

问题A:

判断一棵树里是否含有另一棵树的结构:

遍历每个节点判断,时间复杂度O(N*M)


问题B:

找到二叉树中的最大搜索二叉子树:
树形dp,时间O(N),空间O(h)

递归处理,从下向上,每个节点记录其和其子树中最小值和最大值。

每个节点同时记录是否为搜索子树的根,然后不断合并。


问题C:

找到二叉树中的最大搜索二叉树结构:
树形dp,时间O(N*h),空间O(N)

每个节点维护拓扑贡献记录(l,r),分别代表左右子树对当前节点的贡献数量。

依然从下向上,每提高一次树高,更新子树对当前新根的拓扑贡献记录。

拓扑贡献有个特点,若左子树根节点满足搜索关系,则左子树的左记录不需要改变,只需要判断左子树的右边界。同理,只需判断右子树的左边界。时间复杂度为O(N*h)


问题D:

打印所有和为某值的路径:

路径定义为根到叶节点。

回溯,时间O(N*h)


问题E:

在二叉树中找到累加和为指定值的最长路径:
这里路径定义为从上到下的节点链。

哈希+回溯,时间O(N),空间O(h)

从上向下遍历,维护一个该路径上的哈希表

哈希表存储(sum,level),代表高度level上有和为sum的路径。


问题F:

判断t1树是否包含t2树全部拓扑结构:

最优做法貌似就是暴力,时间O(N*M)


问题G:

判断t1树是否包含结构为t2的子树:

二叉树序列化后kmp,时间O(N+M)

转载地址:http://pbwji.baihongyu.com/

你可能感兴趣的文章
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Clone Graph(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>