树的遍历

简介: 树的遍历

如果要实现树的结构,按照前面的链表实现指针域需要开一个数组,可能比较麻烦,这里采用静态实现,又考虑到一个结点的孩子树不确定,用vector定义变长数组,最后结构如下:

struct node{
   datatype data;
   vector<int>child;
}Node[maxn];

如果遇到某些问题只需要树的结点不需要数据域,上述结构还可以直接用vector<int>Node[maxn]代替

树有两种遍历,是先根遍历和层序遍历,根据上述结构其实现如下:

void preorder(int root) {  //先根遍历 
  printf("%d",Node[root].data);
  for(int i=0;i<Node[root].child.size();i++)
  preorder(Node[root].child[i]);
}
void layerorder(int root) { //层序遍历 
  queue<int>q;
  q.push(root);
  int temp;
  while(!q.empty()){
  temp=q.front();q.pop();
  printf("%d",Node[temp].data);
  for(int i=0;i<Node[root].child.size();i++){
    q.push(Node[root].child[i]);
  }
  } 
}

实际上,观察上述程序你会发现它和dfs、bfs十分相像,而遇到bfs,dfs问题可以将其途中的状态转化为树的结点,那问题也就直观的转化成对树的遍历问题。

对于求层次,求每层结点数、求路径这些问题应该熟练掌握。

相关文章
|
1月前
|
算法 数据处理 Python
深入理解二叉树:结构、遍历和实现
深入理解二叉树:结构、遍历和实现
深入理解二叉树:结构、遍历和实现
|
1月前
|
NoSQL 容器 Kubernetes
树、二叉树、树的遍历、树的序列化
树、二叉树、树的遍历、树的序列化
|
9月前
|
存储 算法
二叉树的创建和遍历
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分
73 0
|
10月前
|
存储 算法
二叉树的三序遍历
简要介绍二叉树的三序遍历和重构和代码实现。
|
10月前
|
存储 算法 编译器
探索二叉树:结构、遍历与应用
什么是二叉树? 二叉树是一种由节点组成的层次结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。这种结构使得二叉树在存储和搜索数据时非常高效。二叉树的一个特殊情况是二叉搜索树(Binary Search Tree,BST),它满足左子节点的值小于父节点,右子节点的值大于父节点,这种特性使得在BST中进行查找操作更加高效。
77 0
二叉树四种遍历的实现
二叉树四种遍历的实现
82 0
二叉树的实现(前中后层序四种遍历)
二叉树的实现(前中后层序四种遍历)
41 0
|
存储 编译器
二叉树的递归遍历与迭代遍历(图示)
本文将讲述二叉树递归与迭代的相关知识。
95 0
|
机器学习/深度学习 C++ 容器
二叉树创建和遍历(C++实现)
树(Tree)是n(n≥0)个节点的有限集。在任意一棵树中有且仅有一个特定的称为根(Root)的节点;当n>1时,其余节点可分m(m>0)为个互不相交的有限集T1,T2,...,Tm;其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 二叉树(Binary Tree)是一种特殊的有序树型结构,所有节点最多只有2棵子树。
498 0