1.树的同构
Problem
判断给定两棵树T1和T2是否同构。详细描述
Analysys
- 构建树的结构体数组表示,下标指向左右儿子的所在位置。
- 确定树根,用一个check数组保存当前节点有没有被指向,没有被指向的节点为根节点。
- 判断一棵树是否同构,三种情况:两棵树是否有空树,返回两者是否都为空的并集;两棵树当前节点元素值不同,不同构返回false;否则,树T1,T2的左子树 && T1,T2的右子树是否同时同构或者T1左子树 || T2右子树 && T1左子树,T2右子树是否同时同构。根据上述条件递归调用进行判断。
Code
1 |
|
2.List Leaves
Problem
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.详细描述
Analysys
- 叶子结点打印按照层次遍历打印,判断左右子树为空时输出叶子节点。
- 树的问题可考虑数组还是链表两种存储方式,然后基于遍历和堆栈以及队列以及条件对树进行相关操作。
Code
1 |
|
3.Tree Traversals Again
Problem
给出中序遍历的递归实现,求出后序遍历结果。详细描述
Analysys
- 观察给出示例,递归版中序遍历的入栈操作即前序遍历结果,出栈顺序即中序遍历结果,可以将问题转化为已知先序、中序,构造树求后序。
- 先序、中序已知,如何构建树呢?首先由前序确定树根为pre[startPre]在中序序列的位置i,然后递归构造做右子树。
Code
1 | import java.io.*; |
Extension
如果已知后序、中序,求前序呢?思路和上题一样。
Code
1 | import java.io.*; |
声明:本站所有文章均为原创或翻译,遵循署名 - 非商业性使用 - 禁止演绎 4.0 国际许可协议,如需转载请确保您对该协议有足够了解,并附上作者名 (Tsukasa) 及原文地址