剑指Offer面试题:23.二叉树中和为某一值的路径
2015-09-06 23:40
627 查看
一、题目:二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。例如输入下图中二叉树和整数22,则打印出两条路径,第一条路径包含结点10、12,第二条路径包含结点10、5和7。private static void TestPortal(string testName, BinaryTreeNode root, int expectedSum) { if (!string.IsNullOrEmpty(testName)) { Console.WriteLine("{0} begins:", testName); } FindPath(root, expectedSum); Console.WriteLine(); } private static void SetSubTreeNode(BinaryTreeNode root, BinaryTreeNode lChild, BinaryTreeNode rChild) { if (root == null) { return; } root.leftChild = lChild; root.rightChild = rChild; } private static void ClearUpTreeNode(BinaryTreeNode root) { if (root != null) { BinaryTreeNode left = root.leftChild; BinaryTreeNode right = root.rightChild; root = null; ClearUpTreeNode(left); ClearUpTreeNode(right); } }
View Code
(2)功能、特殊输入测试
// 10 // / \ // 5 12 // /\ // 4 7 // 有两条路径上的结点和为22 public static void Test1() { BinaryTreeNode node10 = new BinaryTreeNode(10); BinaryTreeNode node5 = new BinaryTreeNode(5); BinaryTreeNode node12 = new BinaryTreeNode(12); BinaryTreeNode node4 = new BinaryTreeNode(4); BinaryTreeNode node7 = new BinaryTreeNode(7); SetSubTreeNode(node10, node5, node12); SetSubTreeNode(node5, node4, node7); Console.WriteLine("Two paths should be found in Test1."); TestPortal("Test1", node10, 22); ClearUpTreeNode(node10); } // 10 // / \ // 5 12 // /\ // 4 7 // 没有路径上的结点和为15 public static void Test2() { BinaryTreeNode node10 = new BinaryTreeNode(10); BinaryTreeNode node5 = new BinaryTreeNode(5); BinaryTreeNode node12 = new BinaryTreeNode(12); BinaryTreeNode node4 = new BinaryTreeNode(4); BinaryTreeNode node7 = new BinaryTreeNode(7); SetSubTreeNode(node10, node5, node12); SetSubTreeNode(node5, node4, node7); Console.WriteLine("No paths should be found in Test2."); TestPortal("Test2", node10, 15); ClearUpTreeNode(node10); } // 5 // / // 4 // / // 3 // / // 2 // / // 1 // 有一条路径上面的结点和为15 public static void Test3() { BinaryTreeNode node5 = new BinaryTreeNode(5); BinaryTreeNode node4 = new BinaryTreeNode(4); BinaryTreeNode node3 = new BinaryTreeNode(3); BinaryTreeNode node2 = new BinaryTreeNode(2); BinaryTreeNode node1 = new BinaryTreeNode(1); node5.leftChild = node4; node4.leftChild = node3; node3.leftChild = node2; node2.leftChild = node1; Console.WriteLine("One path should be found in Test3."); TestPortal("Test3", node5, 15); ClearUpTreeNode(node5); } // 1 // \ // 2 // \ // 3 // \ // 4 // \ // 5 // 没有路径上面的结点和为16 public static void Test4() { BinaryTreeNode node1 = new BinaryTreeNode(1); BinaryTreeNode node2 = new BinaryTreeNode(2); BinaryTreeNode node3 = new BinaryTreeNode(3); BinaryTreeNode node4 = new BinaryTreeNode(4); BinaryTreeNode node5 = new BinaryTreeNode(5); node1.leftChild = node2; node2.leftChild = node3; node3.leftChild = node4; node4.leftChild = node5; Console.WriteLine("No paths should be found in Test4."); TestPortal("Test4", node1, 16); ClearUpTreeNode(node1); } // 树中只有1个结点 public static void Test5() { BinaryTreeNode node1 = new BinaryTreeNode(1); Console.WriteLine("One paths should be found in Test5."); TestPortal("Test5", node1, 1); ClearUpTreeNode(node1); } // 树中没有结点 public static void Test6() { Console.WriteLine("No paths should be found in Test6."); TestPortal("Test6", null, 0); }
3.2 测试结果
作者:周旭龙
出处:http://edisonchou.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
相关文章推荐
- 黑马程序员————java基础————多线程
- 程序员面试题集锦
- 程序员面试题集锦
- 黑马程序员-Java基础:集合(Map)
- 黑马程序员_Java泛型
- 程序员的激情其实是一种痛苦
- 一些典型的笔试面试题
- 【学习计划】非常有用的笔试面试经验
- 黑马程序员————java基础————正则表达式
- 程序员的人生规划
- 腾讯面试题——多项式求解
- 初级安卓码农入职第一天
- BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
- 黑马程序员之反射
- leetcode 之 H-index
- 黑马程序员之IO字节流及缓冲技术
- 优化Android Studio/Gradle构建(转自黑马程序员)
- iOS面试题02-数据存储
- 请问面试官?一次很有意思的调查活动
- fir.im Weekly - 每个程序员都应当拥有的技能树