(二叉搜索树10.1.2)POJ 1577 Falling Leaves(根据删除叶子节点的顺序输出计算一颗二叉树的前序遍历序列)
2013-11-07 10:30
513 查看
package com.njupt.acm; import java.util.Scanner; public class POJ_1577 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int levels = 0; String line; String[] leaves = new String[26]; while(scanner.hasNext()){ line = scanner.nextLine().trim(); if(line.equals("*")){ System.out.println(preorder(leaves, levels)); leaves = new String[26]; levels = 0; }else if(line.equals("$")){ System.out.println(preorder(leaves, levels)); break; }else{ leaves[levels++] = line; } } } public static String preorder(String[] leaves,int levels){//将根据leaves中的行序列计算前序遍历序列 while(levels > 0 && leaves[levels-1].length() == 0){//从leaves[]标的最后一项开始找,找到第一个非空项.. levels--; } if(levels == 0){ return ""; } levels--; char root = leaves[levels].charAt(0);//leaves表尾存储子根 String[] left = new String[levels]; String[] right = new String[levels]; int i; for(i = 0 ; i < levels ; ++i){ int past = 0; while(past < leaves[i].length() && leaves[i].charAt(past) < root){//找到左右子树的分界点 past++; } left[i] = leaves[i].substring(0,past); right[i] = leaves[i].substring(past); } return root + preorder(left, levels) + preorder(right, levels); } }
相关文章推荐
- POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)
- 已知一颗二叉树S的前序遍历和中序遍历序列,请编程输出二叉树S的后续遍历序列。
- 已知一颗二叉树S的前序遍历和中序遍历 序列,请编程输出二叉树S的后续遍历序列.
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算
- 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言
- poj-1577 Falling Leaves(搜索二叉树)
- 7-4 输出一棵给定二叉树的所有叶子节点
- 删除二叉树所有叶子节点---将叶子节点都是设置为0
- POJ 1577 Falling Leaves 二叉树操作
- 查看一颗二叉树从根到叶子路径的节点和是否等于某个给定的数
- 非递归遍历二叉树(前序,中序,后序,叶子节点的计算)
- 设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
- POJ 1577 Falling Leaves(二叉搜索树)
- 输出二叉树叶子节点数目
- 二叉树-输出树中从根到每个叶子节点的路径
- 四叉树通常用来以紧凑的形式对数字图像进行编码(1.根据叶子节点构造四叉树 2.根据四叉树结构对加密图像进行解码 3.输出解码后的图像信息 )
- 二叉树 删除所有叶子节点
- POJ 1577 Falling Leaves(二叉搜索树)
- 二叉树叶子节点个数计算 -- 采用递归和非递归方法实现