完全二叉树和满二叉树也有很好的性质,有时候会利用它们的特点求解
完全二叉树常用层次遍历。毕竟是最后一层或者次一层才会有叶子节点
662. Maximum Width of Binary Tree
Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null.
The width of one level is defined as the length between the end-nodes (the leftmost and right most non-null nodes in the level, where the null nodes between the end-nodes are also counted into the length calculation.
求树的宽度,开始想用层次遍历,如果打印出每一行,然后遍历每一行,就可以选出最宽的。
但是发现,这种方案会忽略空节点,而有些时候空节点是可以占位
于是就想补全空节点,但是补全空节点,只有当父亲不为空的时候,才方便补空的孩子,但是当父亲为空,也有可能需要孩子占位,比如[1,1,1,null,null,1,1,null,null,1],而且此时复杂度就比较高了
好的方法可以是,其实就是想补成满二叉树,但是还要知道哪些是原来的,哪些是补的。也就是说,要是能直接知道当前节点的位置就好了。其实可以的,由根节点开始,每个节点的位置,在满二叉树中,就是父节点的二倍,或者两倍加1,这样每个节点的位置都知道,然后就是选出同一层的,求最值
求最值可以再遍历过程中只保持最大的
注意,只在队列中保存非空节点,效率更高
要习惯和敢于用更多的数据结构缓存以解决问题和提升效率