二叉树的序列化和反序列化,二叉树深度、广度优先遍历
来源:互联网 发布:linux c语言创建文件 编辑:程序博客网 时间:2024/06/07 00:48
二叉树的序列化是将二叉树->字符串等形式
二叉树反序列化是将字符串等形式->二叉树
序列化使用先(中、后)序遍历,反序列化时也使用相应的顺序
通常节点后面跟着一个特殊符号作为节点结束标记如!
空一般用#
深度优先遍历,也就深入的遍历,沿着每一个分支直到走到最后,然后才返回来遍历剩余的节点。二叉树不同于图,图需要标记节点是否已经访问过,因为可能会存在环,而二叉树不会出现环,所以不需要标记。那么,我们只需要一个栈空间,来压栈就好了。因为深度优先遍历,遍历了根节点后,就开始遍历左子树,所以右子树肯定最后遍历。我们利用栈的性质,先将右子树压栈,然后在对左子树压栈。此时,左子树节点是在top上的,所以可以先去遍历左子树。
如下是深度优先遍历的代码:
- void DepthFirstTravel(Tree *root)
- {
- stack<Tree *> s;
- s.push(root);
- while(!s.empty())
- {
- root = s.top();
- cout << root->data << " ";
- s.pop();
- if(root->rchild != NULL)
- {
- s.push(root->rchild);
- }
- if(root->lchild != NULL)
- {
- s.push(root->lchild);
- }
- }
- }
广度优先遍历
- void BreadthFirstTravel(Tree *root)
- {
- queue<Tree *> q;
- q.push(root);
- while(!q.empty())
- {
- root = q.front();
- cout << root->data << " ";
- q.pop();
- if(root->lchild != NULL)
- {
- q.push(root->lchild);
- }
- if(root->rchild != NULL)
- {
- q.push(root->rchild);
- }
- }
- }
0 0
- 二叉树的序列化和反序列化,二叉树深度、广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的广度优先遍历和深度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 配置eclipse maven过程中遇到的问题
- AJAX异步请求
- Kubernetes 1.2 新功能介绍:DaemonSet
- hdu5748
- HDU 1172 猜数字 暴力枚举
- 二叉树的序列化和反序列化,二叉树深度、广度优先遍历
- spring @Autowired与@Resource 的区别
- Kubernetes 1.2 新功能介绍:Limit Range和Resource Quota
- BFC 神奇背后的原理
- 可持久化并查集(三)——从动态到可持久化
- 03:一文全解:使用Tensorflow搭建卷积神经网络CNN识别手写数字图片
- 稳定排序和不稳定排序
- openssl详解
- IOS开发之OC篇(9)—— NSURL