您的位置:首页 > 其它

深度优先搜索和广度优先搜索

2018-03-01 15:36 295 查看
#include <iostream>
#include <stack>
#include <queue>

using namespace std;

struct BitNode
{
int data;
BitNode *left, *right;
BitNode(int x) :data(x), left(0), right(0){}
};

void Create(BitNode *&root)
{
int key;
cin >> key;
if (key == -1)
root = NULL;
else
{
root = new BitNode(key);
cout << key << "'s left...\n";
Create(root->left);
cout << key << "'s right...\n";
Create(root->right);
}
}

void PreOrderTraversal(BitNode *root)
{
if (root)
{
cout << root->data << " ";
PreOrderTraversal(root->left);
PreOrderTraversal(root->right);
}
}

//深度优先搜索
//利用栈,现将右子树压栈再将左子树压栈
void DepthFirstSearch(BitNode *root)
{
stack<BitNode*> nodeStack;
nodeStack.push(root);
while (!nodeStack.empty())
{
BitNode *node = nodeStack.top();
cout << node->data << ' ';
nodeStack.pop();
if (node->right)
{
nodeStack.push(node->right);
}
if (node->left)
{
nodeStack.push(node->left);
}
}
}

//广度优先搜索,使用队列
void BreadthFirstSearch(BitNode *root)
{
queue<BitNode*> nodeQueue;
nodeQueue.push(root);
while (!nodeQueue.empty())
{
BitNode *node = nodeQueue.front();
cout << node->data << ' ';
nodeQueue.pop();
if (node->left)
{
nodeQueue.push(node->left);
}
if (node->right)
{
nodeQueue.push(node->right);
}
}
}

int  main()
{
BitNode *root = NULL;
Create(root);
//前序遍历
PreOrderTraversal(root);
//深度优先遍历
cout << endl << "dfs" << endl;
DepthFirstSearch(root);
//广度优先搜索
cout << endl << "bfs" << endl;
BreadthFirstSearch(root);
}


[xiongli@localhost data_struct]$ ./a.out

10

10's left...
99
99's left...
10
10's left...
-1
10's right...
-1
99's right...
29
29's left...
-1
29's right...
-1
10's right...
99
99's left...
82
82's left...
102
102's left...
-1
102's right...
-1
82's right...
-1
99's right...
-1
10 99 10 29 99 82 102 
dfs
10 99 10 29 99 82 102 
bfs
10 99 99 10 29 82 102
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: