[leetcode] 根据String数组构造TreeNode,用于LeetCode树结构相关的测试用例
2013-06-18 22:35
423 查看
LeetCode 跟树结构相关的题目的测试用例中大多是通过String数组来构造树。例如{2,#,3,#,4,#,5,#,6},可以构造出如下的树(将树结构逆时针选择90度显示):
6
5
4
3
2
很直观地可以理解,输入的String数组是对树结构进行“层序”遍历得到的结果。以下代码用于构造树结构,并提供printTree用于打印树结构。
6
5
4
3
2
很直观地可以理解,输入的String数组是对树结构进行“层序”遍历得到的结果。以下代码用于构造树结构,并提供printTree用于打印树结构。
package util; import java.util.LinkedList; import java.util.Queue; public class util { public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } /* * construct TreeNode from a array format string, for test cases of LeetCode */ public static TreeNode createTree(String tree) { // {1,2,3,4,#,#,#,5,#,6,#,7,#,8} String[] ss = tree.split(","); return createTree(ss); } public static TreeNode createTree(String[] tree) { Queue<TreeNode> q = new LinkedList<TreeNode>(); // 1st one should not be # TreeNode root = constructOne(tree[0]); q.add(root); int idx = 1; while (!q.isEmpty()) { TreeNode tn = q.poll(); if (tn == null) { continue; } // construct tn's left&right node // when to stop if (idx == tree.length) { break; } TreeNode left_ = constructOne(tree[idx]); tn.left = left_; q.add(left_); idx++; if (idx == tree.length) { break; } TreeNode right_ = constructOne(tree[idx]); idx++; tn.right = right_; // add to queue q.add(right_); } return root; } private static void printNode(TreeNode tn, int indent) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < indent; i++) { sb.append("\t"); } sb.append(tn.val); System.out.println(sb.toString()); } public static void printTree(TreeNode root, int indent) { if (root == null) { return; } // if (root.left == null && root.right == null) { // printNode(root, indent); // } // right printTree(root.right, indent + 1); // self printNode(root, indent); // left printTree(root.left, indent + 1); } public static void printTree(TreeNode root) { // right first printTree(root, 0); } private static TreeNode constructOne(String s) { if (s.compareTo("#") == 0) { return null; } else { return new TreeNode(Integer.parseInt(s)); } } public static void main(String args[]) { TreeNode tn = createTree("2,#,3,#,4,#,5,#,6"); printTree(tn); } }
相关文章推荐
- android+web测试基础3-3+购物车相关的测试用例
- Android 把bitmap转换成String,计算图片的缩放值,根据路径获得突破并压缩返回bitmap用于显示,获取保存 隐患检查的图片文件夹名称,获取保存图片的目录,根据路径删除图片,添加到图库
- 关于变量n获值后是否能用于数组的测试
- LeetCode 根据前序和中序遍历构造二叉树的三种解法
- 测试用例的一般结构
- 1.1存储用于测试用例的数据
- 测试相关shell命令总结2——结构控制语句,命令行参数
- 四叉树通常用来以紧凑的形式对数字图像进行编码(1.根据叶子节点构造四叉树 2.根据四叉树结构对加密图像进行解码 3.输出解码后的图像信息 )
- Leetcode406. 根据身高重新构造队列
- 根据测试用例的java源码自动生成TestNG的XML文件
- 登陆页面相关测试用例
- 黑马程序员10——结构和数组相关概念和重点
- JSON数组去重 * @param: [array] json Array * @param: [string] 唯一的key名,根据此键名进行去重
- PhpStorm 快速运行测试用例的相关配置
- [oj.leetcode] #179 - LargestNumber, 如何在7ms内跑完 221个测试用例
- 根据数据库表中记录自动构造一棵结构树的一种高效算法
- ST第二次作业,相关程序测试及测试用例
- LeetCode(Construct Binary Tree from Inorder and Postorder Traversal)根据二叉树的中序和后续构造二叉树
- 根据测试用例的java源码自动生成TestNG的XML文件
- 软件测试===测试用例基线结构