网站建设栏目规划,怎么才能在百度上做引流呢,wordpress 百度百家,运城公司做网站题目地址#xff1a;序列化二叉树_牛客题霸_牛客网
题目回顾#xff1a; 解题思路#xff1a; 首先#xff0c;序列化就是将二叉树的节点值放入一个字符串中#xff0c;这里可以按照前序遍历的思路来进行操作#xff0c;谦虚遍历是#xff1a;根左右的情况#xff0c;…题目地址序列化二叉树_牛客题霸_牛客网
题目回顾 解题思路 首先序列化就是将二叉树的节点值放入一个字符串中这里可以按照前序遍历的思路来进行操作谦虚遍历是根左右的情况其中根据题意我们用#来表示空节点用来表示节点与节点之间的分割。 而反序列化就是根据序列化得到的字符串将二叉树进行重建操作这里类似于加密解密的过程。由于我们在序列化的时候采用的是前序遍历因此在反序列化的过程中我们也要采用前序遍历。 首先处理空树的情况在空树时我们返回”#“然后调用递归函数前序递归遍历二叉树。 在前序递归函数中如果遇到非空节点会将其添加到str中当然也包括表示节点与节点间分割的符。然后依次递归它的左子树和右子树。 index则表示的是序列中的下标。 进行反序列化的时候首先处理空树的情况也就是说如果字符串是”#“表示这是一个空树。如果不是就调用反序列化的递归函数前序递归重建二叉树。在这个递归函数当中如果遇到”#“表示当前节点是空节点如果遇到数字则根据符来进行分割操作同时将数字加入到节点中。根据前序遍历根左右的顺序依次递归左右子树。 整体代码 public int index 0; private void SerializeFunction(TreeNode root, StringBuilder str){if(root null){str.append(#);return;}str.append(root.val).append(!);SerializeFunction(root.left, str); SerializeFunction(root.right, str);}//序列化public String Serialize(TreeNode root) {if(root null) return #;StringBuilder res new StringBuilder();SerializeFunction(root, res);return res.toString();}private TreeNode DeserializeFunction(String str){if(str.charAt(index) #){ index;return null;}int val 0;while(str.charAt(index) ! ! index ! str.length()){ val val * 10 ((str.charAt(index)) - 0);index;}TreeNode root new TreeNode(val);if(index str.length()) return root;elseindex;root.left DeserializeFunction(str); root.right DeserializeFunction(str);return root;}//反序列化public TreeNode Deserialize(String str) {if(str #) return null;TreeNode res DeserializeFunction(str);return res;}