劍指offer(64):序列化二叉樹
阿新 • • 發佈:2019-02-20
題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹。
分析
如果二叉樹的序列化是從根節點開始,那麼對應的而反序列化也是從根節點開始的。因此可以使用二叉樹的前序遍歷來序列化二叉樹,當前序遍歷碰到null值是,使用“#”表示,每一個節點的數值之間用“,”隔開。
牛客AC:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public int index = -1; // 節點在序列中的索引
/**
* 序列化
* 前序遍歷,將二叉樹節點的值轉為字元序列,null轉為“#”
*
* @param root
* @return
*/
String Serialize(TreeNode root) {
StringBuffer s = new StringBuffer();
if (root == null) {
s.append("#," );
return s.toString();
}
s.append(root.val + ",");
s.append(Serialize(root.left));
s.append(Serialize(root.right));
return s.toString();
}
/**
* 反序列化
*
* @param str
* @return
*/
TreeNode Deserialize(String str) {
index++;
int length = str.length();
if (index >= length) {
return null;
}
String[] nodeSeq = str.split(",");
TreeNode pNode = null;
if (!nodeSeq[index].equals("#")) {
pNode = new TreeNode(Integer.valueOf(nodeSeq[index]));
pNode.left = Deserialize(str);
pNode.right = Deserialize(str);
}
return pNode;
}
}
參考
1. 何海濤,劍指offer名企面試官精講典型程式設計題(紀念版),電子工業出版社