二叉树中和为某一值的路径
题目
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始一直到也借点所经过的节点形成一条路径。
思路
- 假设找到了其中一条路径,达到叶结点后,由于没有指向父节点的指针,所以必须 提前创建一个链表 存储前面经过的节点。
- 由于从根节点出发,所以要想用到使用前序遍历。
利用率I按表存储节点,在该节点完成左右子树的路径搜索后(即递归函数结束,返回到其父节点后),要删除 该节点,从而记录别的路径。
具体实现:通过前序遍历,从根节点出发,每次在链表中存储便利到的节点,若到达叶子节点,则根据所有节点的和是否等于输入的整数,判断是否打印输出。在当前节点访问结束后,递归函数将会返回到它的父节点,所以在函数退出之前,要删除链表中的当前节点,以确保返回父节点是,储存的路径刚好是从根节点到父节点。
测试用例
- 功能测试(一条或者多条对应的路径,无对应路径,节点值为正负零)
- 特殊测试(根节点为null)
java代码
1 |
|
牛客网代码
1 | /* |
总结
- 二叉树的许多题目都与遍历(包括层次遍历)有关,要深刻理解;根据节点的位置判断使用哪一种遍历。
- 而二叉树遍历过程没有父节点指针,要保存路径的话,需要创建容器存储之前的节点。
- 熟悉这道题中在每次递归函数结束前删除当前节点的操作,这可以确保返回到父节点时路径刚好是从根节点到父节点。