C语言 bfs\dfs模板

bfs

建立数组队列以保存节点
left指向第一个元素(及前面的元素已经被pop),right指向最后一个元素的右边(及right为下一个入队列的位置)
将根放入数组,left = 0, right = 1
while (left < right){
	取left指向的结点,并pop当前节点 (left++)
	将该结点的左右结点加入数组队列
}
void *mybfs(struct Node *root) {
    if (!root) {
        return NULL;
    }
    struct Node *q[LEN];
    int left = 0, right = 0;
    q[right++] = root;
    while (left < right) {
    	struct Node *new = q[left++];//you can do anything with this node
        if (new->left) {
            q[right++] = new->left;
        }
        if (new->right) {
            q[right++] = new->right;
        }
    }
}

dfs

void dfs(struct Node *root, struct result){
	//stop
	if (root == NULL){
		//save your result
		return;
	}
	//modify your result
	dfs(root->left,result);
	dfs(root->right,result);
}

int main(){
	//init
	dfs(root,result);
}

有个有趣的设计题:leetcode341

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值