java二叉树的根结点_求二叉树根节点到子节点和为某一值的所有路径(Java实现)...

本文介绍了一种算法,用于查找二叉树中所有节点值之和等于特定整数的路径,并提供了完整的Java代码实现。

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

该问题应该属于二叉树遍历一类的问题吧。简单描述一下:

/**

* 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。

* 如下二叉树,和25

*             8

*    / \

*   8   7

* / \

*             9   2

*            / \

*           4   7

*   返回输出结果:8,8,9

*     8,8,2,7

*/

下面用Java代码实现:

定义树节点类:public class Node {

private int data;

private Node leftNode;

private Node rightNode;

public int getData() {

return data;

}

public void setData(int data) {

this.data = data;

}

public Node getLeftNode() {

return leftNode;

}

public void setLeftNode(Node leftNode) {

this.leftNode = leftNode;

}

public Node getRightNode() {

return rightNode;

}

public void setRightNode(Node rightNode) {

this.rightNode = rightNode;

}

}

实现方法:public class PathInTree {

public void findPath(Node node,int k) {

if(node == null) return;

Stack stack = new Stack<>();

findPath(node,k,stack);

}

private void findPath(Node node, int k, Stack path) {

if(node==null) return;

//if(node.getLeftNode()==null&&node.getRightNode()==null) {

if(node.getData()==k) {

System.out.println("路径开始");

for(int i:path)

System.out.print(i+",");

System.out.println(node.getData());

//}

}else {

path.push(node.getData());

findPath(node.getLeftNode(), k-node.getData(),path);

findPath(node.getRightNode(), k-node.getData(), path);

path.pop();

}

}

public static void main(String[] args){

Node root1 = new Node();

Node node1 = new Node();

Node node2 = new Node();

Node node3 = new Node();

Node node4 = new Node();

Node node5 = new Node();

Node node6 = new Node();

root1.setLeftNode(node1);

root1.setRightNode(node2);

node1.setLeftNode(node3);

node1.setRightNode(node4);

node4.setLeftNode(node5);

node4.setRightNode(node6);

root1.setData(8);

node1.setData(8);

node2.setData(7) ;

node3.setData(9);

node4.setData(2);

node5.setData(4);

node6.setData(7);

PathInTree test = new PathInTree();

/**

* 当输入和为25时,结果为:

* 路径开始:8,8,9

* 路径开始:8,8,2,7

*/

test.findPath(root1, 25);

/**

* 当输入和为18时,结果为:

* 路径开始:8,8,2

*/

test.findPath(root1, 18);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值