pta 是否同一棵二叉搜索树
2018-03-24 14:47
316 查看
7-15 是否同一棵二叉搜索树(25 分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1,
3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。
输入格式:
输入包含若干组测试数据。每组数据的第1行给出两个正整数N
(≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。
输出格式:
对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。
输入样例:
4 2 3 1 4 2 3 4 1 2 3 2 4 1 2 1 2 1 1 2 0
输出样例:
Yes No No
思路:直接建树,然后进行比较即可(建树和比较都使用递归)
注意java里面的参数传递,相当于c语言里面的一级指针,所以要利用返回值建树,例如*p,你只能改变*p,而不能改变p,但是你要做的确是改变p
参考代码:
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1,
3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。
输入格式:
输入包含若干组测试数据。每组数据的第1行给出两个正整数N
(≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。
输出格式:
对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。
输入样例:
4 2 3 1 4 2 3 4 1 2 3 2 4 1 2 1 2 1 1 2 0
输出样例:
Yes No No
思路:直接建树,然后进行比较即可(建树和比较都使用递归)
注意java里面的参数传递,相当于c语言里面的一级指针,所以要利用返回值建树,例如*p,你只能改变*p,而不能改变p,但是你要做的确是改变p
参考代码:
import java.util.Scanner; public class Main { //判断2棵树是否相同 public static boolean charge(Node src, Node dst){ //2个结点都不为空 if(src != null && dst != null){ //先判断他们的值 if(src.value == dst.value){ //成立则进行递归,判断左右字树都相等 return charge(src.left, dst.left) && charge(src.right, dst.right); }else{ //不成立则返回 return false; } }else if(src == null && dst == null){ //2个结点都为空,也相等,返回true return true; }else{ //一个为空,以不为空,不相等 return false; } } //进行结点的插入 public static Node insert(Node root, int value) { if (root == null) { root = new Node(); root.value = value; return root; } else { if (value > root.value) { root.right = insert(root.right, value); } else { root.left = insert(root.left, value); } return root; } } //建树 public static Node build(int n, int[] arr) { Node root = null; for (int i = 0; i < n; ++i) { root = insert(root, arr[i]); } return root; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; do { n = sc.nextInt(); if (n != 0) { int l = sc.nextInt(); int[] arr = new int ; for (int i = 0; i < n; ++i) { arr[i] = sc.nextInt(); } Node root = build(n, arr); for (int i = 0; i < l; ++i) { for (int j = 0; j < n; ++j) { arr[j] = sc.nextInt(); } Node t = build(n, arr); if (charge(root, t)) { System.out.println("Yes"); } else { System.out.println("No"); } } } } while (n != 0); } } //结点数据结构 class Node { public int value; public Node left; public Node right; }
相关文章推荐
- PTA-是否同一棵二叉搜索树
- PTA 数据结构与算法题目集(中文)5-4 是否同一棵二叉搜索树 (25分)
- PTA 5-1 是否同一棵二叉搜索树(数据结构)
- 5-4 是否同一棵二叉搜索树 (25分) PTA
- pta 是否同一棵二叉搜索树
- PTA习题 5-4 是否同一棵二叉搜索树(二叉搜索树的构建以及相同树的判断)
- pta 是否同一棵二叉搜索树
- pta 是否同一棵二叉搜索树
- pta 是否同一棵二叉搜索树
- pta 是否同一棵二叉搜索树
- pta 是否同一棵二叉搜索树
- PTA数据结构 5-4 是否同一棵二叉搜索树
- PTA 7-1 是否同一棵二叉搜索树(25 分) 建树比较
- pta 是否同一棵二叉搜索树
- PTA-是否同一棵二叉搜索树
- pta 是否同一棵二叉搜索树
- 04-树4 是否同一棵二叉搜索树 (25分)
- 是否为同一棵二叉搜索树
- 04-树4 是否同一棵二叉搜索树(25 分)
- PTA 7-2 是否完全二叉搜索树(30 分)