搜索-dfs-二叉树

本文介绍了一个使用C语言实现的递归算法示例,该算法通过深度优先搜索(DFS)来寻找给定数组中从指定起点到终点的最大权重路径。通过对数组中的每个元素进行遍历,并递归地计算子路径的权重总和,最终找到从第1个位置到第20个位置之间的具有最大权重的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include<stdio.h>
#define N 21

int a[25]={0,9,8,9,9,5,7,4,2,2,4,5,6,7,8,9,3,3,4,5,1};

int dfs(int l,int r){
	if(l>r){
		return 1;
	}
	if(l==r){
		return a[l];
	}
	int max=0;
	for(int i=l;i<=r;i++){
		int w=dfs(l,i-1)*dfs(i+1,r)+a[i];
		if(w>max) max=w;
	}
	return max;
}

int main(){
	printf("%d\n",dfs(1,20));
	return 0;
}

在Java中,二叉树的深度优先搜索DFS)是一种遍历二叉树的方法。DFS有三种常见的方式:前序遍历、中序遍历和后序遍历。 1. 前序遍历(Preorder Traversal):首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。 2. 中序遍历(Inorder Traversal):首先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。 3. 后序遍历(Postorder Traversal):首先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。 下面是一个示例代码,展示了如何使用递归实现二叉树DFS: ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } } public class BinaryTreeDFS { public void preorderTraversal(TreeNode root) { if (root == null) { return; } System.out.print(root.val + " "); preorderTraversal(root.left); preorderTraversal(root.right); } public void inorderTraversal(TreeNode root) { if (root == null) { return; } inorderTraversal(root.left); System.out.print(root.val + " "); inorderTraversal(root.right); } public void postorderTraversal(TreeNode root) { if (root == null) { return; } postorderTraversal(root.left); postorderTraversal(root.right); System.out.print(root.val + " "); } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); BinaryTreeDFS binaryTreeDFS = new BinaryTreeDFS(); System.out.println("Preorder Traversal:"); binaryTreeDFS.preorderTraversal(root); System.out.println("\nInorder Traversal:"); binaryTreeDFS.inorderTraversal(root); System.out.println("\nPostorder Traversal:"); binaryTreeDFS.postorderTraversal(root); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值