数据结构算法 (树 的基本算法)

一、树的序列化 和反序列化

1) 将二叉树进行序列化  和反序列化; 使用的是前序.

 1 package com.tree;
 2
 3 import java.util.LinkedList;
 4 import java.util.Queue;
 5
 6 // 将一个两叉树 序列化成 字符串 ;
 7 // 和将一字符串 反序列为一个树.
 8 public class TreeNode_Serialization {
 9     public static void main(String[] args) {
10         TreeNode_Serialization s = new TreeNode_Serialization();
11         String str = "2!3!10!#!#!12!123!#!#!#!18!100!#!#!#!"; // 前序
12         TreeNode node = s.pre_deserializationTreeNode(str);
13         s.test(node);
14         System.out.println();
15         System.out.println(s.pre_serializTreeNode(node));
16     }
17     // 将一个两叉树 序列化成 字符串
18     public String pre_serializTreeNode(TreeNode tree) {
19         if (tree == null) {
20             return "#!";
21         }
22         String str = tree.val + "!";
23         str += pre_serializTreeNode(tree.left);
24         str += pre_serializTreeNode(tree.right);
25         return str;
26     }
27     // 将一个 字符串 反序列为一个树;// 前序遍历反序列化
28     public TreeNode pre_deserializationTreeNode(String str) {
29         String[] arrStr = str.split("!");
30         Queue<String> qu = new LinkedList<String>();
31         for (String s : arrStr) {
32             qu.add(s);
33         }
34         return pre_deserializationTreeNodeCore(qu);
35     }
36     // 前序遍历反序列化。
37     private TreeNode pre_deserializationTreeNodeCore(Queue<String> qu) {
38         String str = qu.poll();
39         TreeNode tree = new TreeNode();
40         if ("#".equals(str)) {
41             return null;
42         }
43         tree.left = pre_deserializationTreeNodeCore(qu);
44         tree.val = Integer.valueOf(str);
45         tree.right = pre_deserializationTreeNodeCore(qu);
46         return tree;
47     }
48     public void test(TreeNode tree) {
49         if (tree != null) {
50             test(tree.left);
51             System.out.print(tree.val + " ");
52             test(tree.right);
53         }
54     }
55 }

2) 将二叉树进行序列化  和反序列化; 使用的是层次遍历.

二 、树的遍历(前中后【递归与非递归】,层次,显示结构的层次遍历)

  

原文地址:https://www.cnblogs.com/vincentbnu/p/9463734.html

时间: 2024-07-31 18:22:27

数据结构算法 (树 的基本算法)的相关文章

深入学习高级非线性回归算法 --- 树回归系列算法

前言 前文讨论的回归算法都是全局且针对线性问题的回归,即使是其中的局部加权线性回归法,也有其弊端(具体请参考前文:) 采用全局模型会导致模型非常的臃肿,因为需要计算所有的样本点,而且现实生活中很多样本都有大量的特征信息. 另一方面,实际生活中更多的问题都是非线性问题. 针对这些问题,有了树回归系列算法. 回归树 在先前决策树 (链接) 的学习中,构建树是采用的 ID3 算法.在回归领域,该算法就有个问题,就是派生子树是按照所有可能值来进行派生. 因此 ID3 算法无法处理连续性数据. 故可使用二

数据结构与算法——前缀树和贪心算法(1)

介绍前缀树 何为前缀树?如何生成前缀树? 例子:一个字符串类型的数组arrl,另一个字符串类型的数组arr2.arr2中有哪些字符,是arr 1中 出现的?请打印.arr2中有哪些字符,是作为arr 1中某个字符串前缀出现的?请打印.arr2 中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印arr2中出现次数最大的前缀. public class TrieTree { public static class TrieNode { public int path; public int

浅谈算法和数据结构: 十二 无向图相关算法基础

从这篇文章开始介绍图相关的算法,这也是Algorithms在线课程第二部分的第一次课程笔记. 图的应用很广泛,也有很多非常有用的算法,当然也有很多待解决的问题,根据性质,图可以分为无向图和有向图.本文先介绍无向图,后文再介绍有向图. 之所以要研究图,是因为图在生活中应用比较广泛: 无向图 图是若干个顶点(Vertices)和边(Edges)相互连接组成的.边仅由两个顶点连接,并且没有方向的图称为无向图. 在研究图之前,有一些定义需要明确,下图中表示了图的一些基本属性的含义,这里就不多说明. 图的

hdu3078 建层次树+在线LCA算法+排序

题意:n个点,n-1条边构成无向树,每个节点有权,Q次询问,每次或问从a->b的最短路中,权第k大的值,/或者更新节点a的权, 思路:在线LCA,先dfs生成树0,标记出层数和fa[](每个节点的父亲节点).在对每次询问,走一遍一次公共祖先路上 的权,保持,快排.n*logn*q #include<iostream> //187MS #include<algorithm> #include<cstdio> #include<vector> using

树常见的算法操作

树是数据结构中很重要的一部分,也是各大公司面试常考部分. 继树的各种遍历算法之后,今天又整理一下树的常见算法操作. 本文包括: 1.求节点的最近公共祖先 2.树的序列化与反序列化 3.已知先序遍历和中序遍历构造二叉树 4.已知中序遍历和后序遍历构造二叉树 1.求节点最近的公共祖先 此题不同的要求有不同的解法 如果已知树中的每一个结点有指向父节点的指针: 思路:从给定节点遍历到根节点,当父节点相等时返回. 解法1 private ArrayList<TreeNode> getPath2Root(

【数据结构&amp;&amp;算法系列】KMP算法介绍及实现(c++ &amp;&amp; java)

KMP算法如果理解原理的话,其实很简单. KMP算法简介 这里根据自己的理解简单介绍下. KMP算法的名称由三位发明者(Knuth.Morris.Pratt)的首字母组成,又称字符串查找算法. 个人觉得可以理解为最小回溯算法,即匹配失效的时候,尽量少回溯,从而缩短时间复杂度. KMP算法有两个关键的地方,1)求解next数组,2)利用next数组进行最小回溯. 1)求解next数组 next数组的取值只与模式串有关,next数组用于失配时回溯使用. 在简单版本的KMP算法中,每个位置 j 的 n

leetcode中关于树的dfs算法题

Validate Binary Search Tree Recover Binary Search Tree Symmetric Tree Same Tree Maximum Depth of Binary Tree Construct Binary Tree from Preorder and Inorder Traversal Construct Binary Tree from Inorder and Postorder Traversal Convert Sorted Array to

【bzoj3289】Mato的文件管理 离散化+莫队算法+树状数组

原文地址:http://www.cnblogs.com/GXZlegend/p/6805224.html 题目描述 Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.Mato有一个习惯,他总是从文件大小从小到大看资料.他先把要看的文件按编号顺序依次拷贝出来,再用他写的排序程序给文件大小排序.排

数据结构之 普利姆算法总结

Agri-Net Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area.