求二叉樹根節點到子節點和為某一值的所有路徑(Java實現)
阿新 • • 發佈:2019-01-27
該問題應該屬於二叉樹遍歷一類的問題吧。簡單描述一下:
/**
* 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。
* 如下二叉樹,和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<Integer> stack = new Stack<>(); findPath(node,k,stack); } private void findPath(Node node, int k, Stack<Integer> 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); } }