1.合并二叉树
水题QAQ
递归方法:我们可以对这两棵树同时进行前序遍历,并将对应的节点进行合并。在遍历时,如果两棵树的当前节点均不为空,我们就将它们的值进行相加,并对它们的左孩子和右孩子进行递归合并;如果其中有一棵树为空,那么我们返回另一颗树作为结果;如果两棵树均为空,此时返回任意一棵树均可(因为都是空)。
2.二叉树的直径
假设我们知道对于该节点的左儿子向下遍历经过最多的节点数 LL(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数 RR (即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为 L+R+1。
我们记节点node 为起点的路径经过节点数的最大值为 dnode ,那么二叉树的直径就是所有节点 dnode
的最大值减一。
最后的算法流程为:我们定义一个递归函数 depth(node) 计算 dnode,函数返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 LL 和 RR ,则该节点为根的子树的深度即为
max(L,R)+1,该节点的 dnode值为
L+R+1
递归搜索每个节点并设一个全局变量 ans 记录 dnode的最大值,最后返回 ans-1 即为树的直径。
算法时间复杂度 O(N).