数据结构里面深度优先搜索的时候怎么得到深度优先生成树的,求大牛帮忙啊,本人菜鸟

2025-01-05 10:36:36
推荐回答(2个)
回答(1):

大体的思想是:从根节点出发先到左子树,如果有子节点则继续向下访问,直到没有孩子,则返回;再从左子树根节点的右分支(如果有)访问,按照同样的规则进行。DFS的基本思想就是:一路到底,只要有子树,那就一直往深处访问,而BFS则是按层次遍历,访问到一个节点时,就要访问与这个节点同一层的所有节点。你自己找一个图,对照书上的算法自己画画,理解会深刻许多。

回答(2):

建树可以根据节点的值来递归进行。
如下是一个例子:

#include
#include
class TreeNode{
public:
TreeNode *left;
TreeNode *right;
int value;
TreeNode(int v): value(v)
{
left = NULL;
right = NULL;
}
~TreeNode() {
if (left != NULL) delete left;
if (right != NULL) delete right;
}
};

//将一个节点p加点树curr中, 如果p的值小于当前节点就把它放到左子树,否者右子树
void addToTree(TreeNode *curr, TreeNode *p) {
if(p->value <= curr->value) {
if(curr->left == NULL) {
curr->left = p;
return;
}
else addToTree(curr->left, p);
} else {
if(curr->right == NULL) {
curr->right = p;
return;
}
else addToTree(curr->right, p);
}
}
void printTree(TreeNode *p) {
if(p==NULL) return;
printTree(p->left);
printf("%d ", p->value);
printTree(p->right);
}

void main() {
int a[] = {3, 4, 1, 2, 5};
TreeNode *root = new TreeNode(a[0]);
for(int i=1; i<5; i++) {
TreeNode *p = new TreeNode(a[i]);
addToTree(root, p);
}
printTree(root); //中序周游打印树节点值。
delete root;
}