码迷,mamicode.com
首页 > 其他好文 > 详细

创建二叉树 树的深度搜索 广度搜索

时间:2014-05-14 20:29:08      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:二叉树   bfs   dfs   递归   

树的深度搜索 与树的前序遍历同理 根节点->左孩子->右孩子  树的广度搜索 与树的层次遍历同理 一层一层遍历内容

深度搜索 采用stack的适配器 先进后出原则  而广度搜索采用的queue适配器 先进先出原则 二者正好满足 搜索需求 简要代码如下:

#include <iostream>
#include <stack>
#include <queue>
#include <malloc.h>

using namespace std;

typedef struct node{
    char data;
    struct node* lchild;        //结构体并未定义完全 采用struct node* 类型
    struct node* rchild;
    node():lchild(NULL),rchild(NULL){}
}*Tree;

int index = 0;  //全局变量

//此处采用递归创建树,传入对象为引用类型,因为在新加入的左右孩子的同时,需要保存整棵树的结构
void createtree(Tree& root,char data[]){
    char e = data[index++];
    if(e == ‘#‘){
        root = NULL;
    }else{
    root = new node();
    root->data = e;
    createtree(root->lchild,data);  //递归创建左孩子
    createtree(root->rchild,data);  //递归创建右孩子
    }
}

void dfs(Tree root){
    stack<node*> nodestack;
    nodestack.push(root);
    node* node;
    while(!nodestack.empty()){
        node = nodestack.top();
        cout<<node->data<<" ";
        nodestack.pop();
        if(node->rchild){
            nodestack.push(node->rchild);
        }
        if(node->lchild){
            nodestack.push(node->lchild);
        }
    }
}

void bfs(Tree root){
    queue<node*> nodequeue;
    nodequeue.push(root);
    node* node;
    while(!nodequeue.empty()){
        node = nodequeue.front();
        nodequeue.pop();
        cout<<node->data<<" ";
        if(node->lchild){
            nodequeue.push(node->lchild);
        }
        if(node->rchild){
            nodequeue.push(node->rchild);
        }
    }
}

int main()
{

    char data[15] = {‘A‘, ‘B‘, ‘D‘, ‘#‘, ‘#‘, ‘E‘, ‘#‘, ‘#‘, ‘C‘, ‘F‘,‘#‘, ‘#‘, ‘G‘, ‘#‘, ‘#‘};
    Tree tree;
    createtree(tree,data);
    cout<<"dfs"<<":"<<endl;
    dfs(tree);
    cout<<endl;
    cout<<"bfs"<<":"<<endl;
    bfs(tree);

    return 0;
}

以上创建树的递归过程如下图分析:

bubuko.com,布布扣

只给出了一半树创建的过程,另一半创建的过程 与其一致。

最后创建完成树的图像即:

bubuko.com,布布扣


而本测试小例,产生的结果如下:

bubuko.com,布布扣

简单阐述了 树的深度,广度搜索。

创建二叉树 树的深度搜索 广度搜索,布布扣,bubuko.com

创建二叉树 树的深度搜索 广度搜索

标签:二叉树   bfs   dfs   递归   

原文地址:http://blog.csdn.net/xd_122/article/details/25781691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!