牛客上的一道题,之前总觉得这种建树方式很奇怪,最后手动画写了一下,发现就是先序遍历建树。建树是二叉树的基础。
//一个测试用例
//第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。
以下 n 行每行四个整数 fa,lch,rch,val,表示 fa 的左儿子为 lch,右儿子为 rch。val 表示 fa 节点的值(如果 lch 为 0 则表示 fa 没有左儿子,rch同理)
9 1
1 2 3 -3
2 4 5 3
4 0 0 1
5 8 9 0
8 0 0 1
9 0 0 6
3 6 7 -9
6 0 0 2
7 0 0 1
6
再看这道题,把遍历到任何一个节点时候都保存一下root 到这个节点的路径上的累加值。
map结构:key-root到这个节点的累加和,value-这个节点所在的层数
有一个概念既是,同一路径上的节点的 累加和之间相差为指定值 的两个节点的层数距离就是我们要求的长度。
代码实现如下(程序员代码面试指南的思想):</