怎么用C++实现图的遍历深度优先和广度优先搜索

必须是c++要有调试结果和流程图什么的!
2025-05-09 02:19:01
推荐回答(1个)
回答1:

#include
class Node{
public:
int value;
Node * left;
Node * right;
Node(int v): value(v){
left = NULL;
right = NULL;
}
~Node() {
if(left != NULL) delete left;
if (right != NULL) delete right;
}
};
class BTree {
private:
Node * root;
public:
BTree(){
root = NULL;
}
void add(int val) {
Node *p = new Node(val);
add(p);
}
void add(Node *node) {
if(node == NULL) return;
if (root == NULL) {
root = node;
return;
}
Node *p = root;
while(p != NULL) {
if(node->value <= p->value) {
if(p->left == NULL) {
p->left = node;
break;
}
else p = p->left;
} else {
if (p->right == NULL) {
p->right = node;
break;
} else p = p->right;
}
}
}
bool find(int val) {
Node *p = root;
while(p) {
if(p->value == val) {
printf("Find %d\n", val);
return true;
}
else if(p->value > val) p = p->left;
else p = p->right;
}
printf("Not Find %d\n", val);
return false;
}
~BTree() {
delete root;
}
void print(){
midTraval(root);
printf("\n");
}
void midTraval(Node *p) {
if(p==NULL) return;
midTraval(p->left);
printf("%d ", p->value);
midTraval(p->right);
}
};
int main()
{
int n;
int a[7] = {5, 3, 1, 2, 4, 8, 6};
BTree tree;
for(int i=0; i<7; i++)
tree.add(a[i]);
tree.print();

tree.find(3);
tree.find(7);

scanf("%d", &n);
return 0;
}