最大路径之和

本文介绍了两种遍历二叉树以找到从根节点到叶子节点的最大路径的方法。第一种方法使用List存储路径和;第二种则利用Map记录路径及其对应的和,便于查找最大路径。

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

public static void findMaxPath(Node node,Stack<Node> stack,List<Integer> list){
		if(node==null){
			return;
		}
		stack.push(node);
		boolean flag=node.leftChild==null&&node.rightChild==null;
		if(flag){
			int sum=0;
			for(Node n:stack){
				sum+=n.element;//计算出从每个叶子节点到跟的路径之和
			}
			list.add(sum);//保存每条路径之和
		}
		if(node.leftChild!=null){
			findMaxPath(node.leftChild,stack,list);
		}
		if(node.rightChild!=null){
			findMaxPath(node.rightChild,stack,list);
		}
		stack.pop();
	}	

如果要求打印最大路径可以在形参列表把list换成Map<String,Integer>把路径作为key,路径上个结点的和作为value.

public static void findMaxPath2(Node node,Stack<Node> stack,Map<String,Integer> map){
		if(node==null)
			return;
		stack.add(node);
		if(node.leftChild==null&&node.rightChild==null){
			String path="";
			int sum=0;
			for(Node n:stack){
				path+=n.element+"->";  //每条路径名称
				sum+=n.element;   	//路径上各节点之和
			}
			map.put(path,sum);		//key:路径上各节点名称 value:各节点之和
		}
		if(node.leftChild!=null){
			findMaxPath2(node.leftChild,stack,map);
		}
		if(node.rightChild!=null){
			findMaxPath2(node.rightChild,stack,map);
		}
		stack.pop();
	}
最后只需将map中的键值打印输出即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值