请实现两个函数,分别用来序列化和反序列化二叉树

import java.util.LinkedList;
import java.util.Queue;
public class Solution {
     String Serialize(TreeNode root) {
		   StringBuilder sb = new StringBuilder();
		   if(root==null) {
			   sb.append("#,");
			   return sb.toString();
		   }
		   sb.append(String.valueOf(root.val));
		   sb.append(‘,‘);
		   sb.append(Serialize(root.left));
		   sb.append(Serialize(root.right));
		   return sb.toString();

	   }
	   TreeNode Deserialize(String str) {
	        String[] values = str.split(",");
	        Queue<String> queue = new LinkedList<>();
	        for(int i=0;i<values.length;i++) {
	        	queue.offer(values[i]);
	        }
	        return reconPreOrder(queue);
	   }

	private TreeNode reconPreOrder(Queue<String> queue) {
		String value = queue.poll();
		if(value.equals("#")) {
			return null;
		}
		TreeNode head = new TreeNode(Integer.valueOf(value));
		head.left = reconPreOrder(queue);
		head.right = reconPreOrder(queue);
		return head;
	}
}

  

原文地址:https://www.cnblogs.com/figsprite/p/10676365.html

时间: 2024-10-08 22:45:45

请实现两个函数,分别用来序列化和反序列化二叉树的相关文章

已知一个函数rand5()能够生成1-5的随机数,请给出一个函数,该函数能够生成1-7的随机数。

这是朋友去笔试的一道题,有点考智商,当时我还很自信的说 random5+random5/2  不就可以了 他说不行,然后我就在网上搜了一下 有一道类似的题目 题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法: 该解法基于一种叫做拒绝采样的方法.主要思想是只要产生一个目标范围内的随机数,则直接返回.如果产生的随机数不在目标范围内,则丢弃该值,重新取

两个函数

编写两个函数,其功能分别是: ① 求N个整数的次大值和次小值. ② 求两个整数的最大公约数和最小公倍数. #include<iostream> using namespace std; void main() { int secondlarge, secondsmall; int *p1; int *p2; int n; cout<<"输入数目的个数"<<endl; cin>>n; p1=new int [n]; p2=new int[n

如何快速的获得url地址中参数名和参数值(在看PHP手册的时候无意间看见这两个函数,猜想能不能搭配使用。)

今天在看手册的时候,无意间看到这两个内置函数parse_url和parse_str.看到他们的用法后,我突然想到能不能利用这两个函数来获得url地址中的参数.为了验证我的猜想,我就以如下url为例子:https://www.baidu.com/baidu?wd=百度&tn=monline_4_dg&ie=utf-8 代码如下: $url = 'https://www.baidu.com/baidu?wd=百度&tn=monline_4_dg&ie=utf-8'; $url_

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

Effective C++:条款24:若所有参数皆需类型转换,请为此采用non-member函数

(一) 假设一个class用来表现有理数,允许整数"隐式转换为"有理数似乎很合理. class Rational{ public: Rational(int numerator = 0, int denominator = 1); //刻意不为explicit:允许int-to-Rational隐式转换 int numerator()const; int denominator()const; }; 在支持算术运算符时考虑该由member函数.还是non-member函数来实现: (1

【OC学习-8】存取器方法?getter和setter?事实上就是赋值和返回值的两种函数

我们在声明类的时候,有实例变量+方法(函数),这些实例变量假设默认的话都是protected类型,一般无法直接訪问.更别提赋值和调用了,所以就产生了两种函数,getter函数就是可以返回实例变量的值,setter函数就是可以设置实例变量的值.(当然假设你把实例变量改成public的话可以直接调用,但不安全) 存取器方法(函数)就是:存--赋值setter函数.取--返回值getter函数. (1)先在类的.h文件中面声明这个函数(方法).一般都有默认的格式(例如以下):返回值函数的函数名字一般都

计算两个时间差的两个函数

计算两个时间差的两个函数  两个时间之差- (NSString *)intervalFromLastDate: (NSString *) dateString1 toTheDate:(NSString *) dateString2{NSArray *timeArray1=[dateString1 componentsSeparatedByString:@"."];dateString1=[timeArray1 objectAtIndex:0]; NSArray *timeArray2=

isset 和empty 两个函数的用法

关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['ORIG_PATH_INFO']);/**获取当前运行的脚本名: 刚开始看是不是有点乱呢. 咋没用

关于js的两个函数

注:这两个函数结合其他主要实现异步的默认checkbox选中和其他选中,关键点在于,从php页面穿过来已经选中的值:function assign(id,go_ids){ if(id > 0){ //var content = jQuery('#assign_'+id).html(); if(go_ids) { jQuery.each(go_ids, function(key,val){ jQuery('#goods_'+val).attr('checked', true); }); } jQu