广度优先搜索求树的深度


#include<iostream>
#include<vector>
#include<stack>
#include<string>
#include<queue>
#include<algorithm>
#include<numeric>
using namespace std;

class node{
public:
int val;
node* left;
node* right;
node():val(0),left(NULL),right(NULL){}
};

node* createTree()
{
node* head = new node[14];
for(int i = 0;i<10;i++)
{
head[i].val = i;
if(2*i+1 < 10)
head[i].left = head + 2*i + 1;
if(2*i+2 < 10)
head[i].right = head + 2*i + 2;
}
return head;
}

int depth(node * root)
{
node* temp = NULL, *head = root; ///注意对这个的理解,*一般是紧跟变量的
int ret = 0;
queue<node*> q;
q.push(head);
q.push(NULL);
while(!q.empty())
{
temp = q.front();
q.pop();
if(NULL == temp)
{
ret++;
if(q.empty())
break;
else
q.push(NULL);
}
else{
if(temp->left != NULL)
q.push(temp->left);
if(temp->right != NULL)
q.push(temp->right);
}
}
return ret;
}

int main()
{
node* t = createTree();
cout<<depth(t);
}

广度优先搜索求树的深度

时间: 2024-08-04 19:42:03

广度优先搜索求树的深度的相关文章

soj 1034 Forest_求树的深度和宽度

题目链接 题意:给你n个节点,m条边,每条边是有向的,这颗树不能有自环,问这颗树的深度和宽度 思路: 不合法情况 1,入度大于1,即存在两条指向同一顶点的边 2,一条入点和出点都相同的边 3,一条变得入点和出点深度已知,但不符合出点的深度是入点的深度加1 4,点入深度未知但出点深度已知 5,遍历完以后,有顶点未遍历,说明有多个根 树的宽度是指,同一层最多有多少个节点 #include <iostream> #include<cstdio> #include<cstring&g

PAT-1021 Deepest Root (25 分) 并查集判断成环和联通+求树的深度

A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root. Input Specification: E

求树的深度(通解)

树的深度求解 递归方法求深度 寻找递归的条件: 解题思路: (1)如果树只有一个结点,则树的深度为1.       (2)如果根结点只有左子树或者只有右子树,那么这棵树的深度是其根结点的左子树的深度再加1.   (3)如果根结点既有左子树又有右子树,那么这棵树的深度是左子树深度与右子树深度的最大值再加1. int GetTreeDepth(BiTree &T) { if (!T) { return 0; } int left = GetTreeDepth(BiTree T->lchild);

LeetCode Maximum Depth of Binary Tree (求树的深度)

题意:给一棵二叉树,求其深度. 思路:递归比较简洁,先求左子树深度,再求右子树深度,比较其结果,返回:max_one+1. 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 *

hdu 4707 Pet【BFS求树的深度】

Pet                                                          Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1909    Accepted Submission(s): 924 链接:pid=4707">Click Me ! Problem Description O

深度优先搜索和广度优先搜索的深入讨论

一.深度优先搜索和广度优先搜索的深入讨论 (一)深度优先搜索的特点是: (1)从上面几个实例看出,可以用深度优先搜索的方法处理的题目是各种各样的.有的搜索深度是已知和固定的,如例题2-4,2-5,2-6:有的是未知的,如例题2-7.例题2-8:有的搜索深度是有限制的,但达到目标的深度是不定的. 但也看到,无论问题的内容和性质以及求解要求如何不同,它们的程序结构都是相同的,即都是深度优先算法(一)和深度优先算法(二)中描述的算法结构,不相同的仅仅是存储结点数据结构和产生规则以及输出要求. (2)深

深度优先搜索和广度优先搜索的比较与分(转)

深度优先搜索和广度优先搜索的深入讨论   (一)深度优先搜索的特点是: (1)无论问题的内容和性质以及求解要求如何不同,它们的程序结构都是相同的,即都是深度优先算法(一)和深度优先算法(二)中描述的算法结构,不相同的仅仅是存储结点数据结构和产生规则以及输出要求. (2)深度优先搜索法有递归以及非递归两种设计方法.一般的,当搜索深度较小.问题递归方式比较明显时,用递归方法设计好,它可以使得程序结构更简捷易懂.当搜索深度较大时,当数据量较大时,由于系统堆栈容量的限制,递归容易产生溢出,用非递归方法设

计算目录树的深度-基于linq

生成word时,有时用户要求要生成所有级别的目录. 这个时候就需要计算目录树的深度.关于求树的深度,已有很多现成的算法.本文主要介绍一种linq的写法.代码看起来挺简洁的. public static int MenuDepth(List<Menu> menuList, int parentId) {    var children = menuList.Where(p => p.parentId == parentId);    if (children.Count() == 0) 

ACM题目————图的广度优先搜索

题目描述 图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接 点的邻接点.如此进行下去,直到所有的结点都访问为止.在该题中,假定所有的结点以“A”--“Z”中的若干字符表示,且要求结点的访问顺序要求根据由 “A”至“Z”的字典顺序进行访问. 输入 输入只包含一个测试用例,第一行为一个自然数n,表示顶点的个数,第二行为n个大写字母构成的字符串,表示顶点,接下来是为一个n*n大小的矩阵,表示图的邻接关系.数字为0表示不邻接,否则为相应的