二叉树的建立与DFS遍历
来源:互联网 发布:淘宝网生产许可证编号 编辑:程序博客网 时间:2024/05/20 23:05
二叉树的建立
二叉树具有如下性质:
- 除去叶子节点,每一个节点都只能有两个从节点(没有值也看作子节点值为NULL)。
- 所有节点除去root节点都有一个父亲节点。
二叉树的建立:
根据二叉树性质,其具有子结构模式,所以可以用递归办法来建立。
1.使用结构体+指针的方式建立
2.用数组建立
结构体加指针用了动态申请空间的办法,但是这样很容易导致指针的丢失而出现内存泄漏——意味着有些内存被浪费。使用数组的方法本质上是一样的,首先开三个数组:
data[maxn];//存放所有节点数据left[maxn];//存放左孩子数据right[maxn];//存放右孩子数据
上面的数组用下标关联如:left[x]表示data[x]的左孩子,right[x]表示其右孩子,而x实际上就是指针替代品
这里举例在得知中序遍历(in_order)和后序遍历(post_order)建立二叉树
//建立二叉树,传入参数有4个,两组范围int build(int L1,int R1,int L2,int R2){ if(L1>R1) return 0; int root=post_order[R2];//后序遍历的最后一个元素为root int p=L1; while(in_order[p]!=root)p++; int cnt=p-L1; lch[root]=build(L1,p-1,L2,L2+cnt-1); rch[root]=build(p+1,R1,L2+cnt,R2-1); return root;}
二叉树的遍历
二叉树的遍历有三种顺序:
- 先序:root->left->right
- 中序:left->root->right
- 后序:left->right->root
在递归的方法下计算节点和,采用中序遍历:
//传入root节点void dfs(int u,int sum){ sum+=u; if(lch[u])dfs(lch[u],sum); if(rch[u])dfs(rch[u],sum);}
0 0
- 二叉树的建立与DFS遍历
- 二叉树的建立与遍历
- c++二叉树的建立与遍历
- 二叉树的建立与先序中序后序遍历
- C++二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的遍历与建立
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 数据结构 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立 与 遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 二叉树的建立与遍历
- Java NIO(1)概述
- java的构造方法链
- Git的Patch功能
- 扩展grep(grep -E 或者 egrep)
- java String详解
- 二叉树的建立与DFS遍历
- 浅谈项目中遇到的关于移动web的JS坑
- Eclipse中设置工程所有文件编码格式为utf-8
- 错误之-Error:Execution failed for task ':app:mergeDebugResources'
- mysql中的常用函数
- ubuntu自带VI编辑器不好用的解决办法
- 当读/写磁盘文件时,read/write是不带缓冲机制的吗?请说明原因。
- 简单模仿百度首页——有一些问题待解决
- Vue从入门到精通(6)--第四阶段(中):填坑