#2
by かずま » 7年前
グラフなら探索済み変数が必要かもしれませんが、
木構造なら不要だと思います。
コード:
#include <stdio.h>
typedef struct _treenode {
int data;
struct _treenode *left;
struct _treenode *right;
} Tree;
Tree *dfs(Tree *node, long data)
{
Tree *p;
if (node->data == data) return node;
if (node->left && (p = dfs(node->left, data))) return p;
if (node->right && (p = dfs(node->right, data))) return p;
return NULL;
}
Tree root[] = {
{ 1, root+1, root+3 },
{ 2, root+2, NULL },
{ 3, root+4, root+5 },
{ 4, NULL, NULL },
{ 5, NULL, NULL },
{ 6, NULL, NULL },
};
int main(void)
{
int data = 5;
Tree *p = dfs(root, data);
if (p)
printf("%d found\n", p->data);
else
printf("%d not found\n", data);
}
root[] は自分で図を書いてみてくださいね。
グラフなら探索済み変数が必要かもしれませんが、
木構造なら不要だと思います。
[code]
#include <stdio.h>
typedef struct _treenode {
int data;
struct _treenode *left;
struct _treenode *right;
} Tree;
Tree *dfs(Tree *node, long data)
{
Tree *p;
if (node->data == data) return node;
if (node->left && (p = dfs(node->left, data))) return p;
if (node->right && (p = dfs(node->right, data))) return p;
return NULL;
}
Tree root[] = {
{ 1, root+1, root+3 },
{ 2, root+2, NULL },
{ 3, root+4, root+5 },
{ 4, NULL, NULL },
{ 5, NULL, NULL },
{ 6, NULL, NULL },
};
int main(void)
{
int data = 5;
Tree *p = dfs(root, data);
if (p)
printf("%d found\n", p->data);
else
printf("%d not found\n", data);
}
[/code]
root[] は自分で図を書いてみてくださいね。