Problem:
microsoft-interview-questions 57 Answers
Given a value and a binary search tree.
Print all the paths(if there exists more than one) which sum up to that value. It can be any path in the tree. It doesn't have to be from the root.
My code:
I also pasted my code at [url]http://www.careercup.com/question?id=2971[/url]
microsoft-interview-questions 57 Answers
Given a value and a binary search tree.
Print all the paths(if there exists more than one) which sum up to that value. It can be any path in the tree. It doesn't have to be from the root.
My code:
I also pasted my code at [url]http://www.careercup.com/question?id=2971[/url]
import java.util.Stack;
public class BinarySearchTree {
private class Node {
int data;
Node left;
Node right;
Node(int v, Node left, Node right){
data = v;
this.left = left;
this.right = right;
}
}
public Node root;
public void insertNode(int data) {
if (root == null) {
root = new Node(data, null, null);
return;
}
Node cur = root;
do {
if(data >= cur.data) {
if(cur.right != null) cur = cur.right;
else {
cur.right = new Node(data, null, null);
return;
}
}else {
if(cur.left != null) cur = cur.left;
else {
cur.left = new Node(data, null, null);
return;
}
}
}while(cur != null);
}
public void inorder() {
System.out.println("\nin-order :");
printSubTreeInOrder(root);
}
public void preorder() {
System.out.println("\npre-order :");
printSubTreePreOrder(root);
}
private void printSubTreeInOrder(Node p){
if(p.left != null) printSubTreeInOrder(p.left);
System.out.print("\t" + p.data);
if(p.right != null) printSubTreeInOrder(p.right);
}
private void printSubTreePreOrder(Node p){
System.out.print("\t" + p.data);
if(p.left != null) printSubTreePreOrder(p.left);
if(p.right != null) printSubTreePreOrder(p.right);
}
public void printAllPathWithSum(int sum){
Stack<Node> path = new Stack<Node>();
findPath(root, sum, path);
}
private void printPath(Stack<Node> path){
System.out.print("\nFind Path:");
for(Node n: path){
System.out.print("\t" + n.data);
}
}
private void findPath(Node p, int value, Stack<Node> path){
if(p == null) return;
if(p.data == value){
path.push(p);
printPath(path);
path.pop();
}else {
path.push(p);
if(p.left != null) findPath(p.left, value - p.data, path);
if(p.right != null)findPath(p.right, value- p.data, path);
path.pop();
}
if(p.left != null) findPath(p.left, value , path);
if(p.right != null)findPath(p.right, value, path);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BinarySearchTree tree = new BinarySearchTree();
tree.insertNode(5);
tree.insertNode(2);
tree.insertNode(7);
tree.insertNode(1);
tree.insertNode(3);
tree.insertNode(9);
tree.inorder();
tree.preorder();
tree.printAllPathWithSum(1);
tree.printAllPathWithSum(0);
tree.printAllPathWithSum(16);
tree.printAllPathWithSum(9);
}
}
二叉搜索树路径求和
本文介绍了一个针对二叉搜索树的问题:寻找所有节点路径,使得这些路径上的节点值之和等于给定的目标值。提供了完整的Java实现代码,包括插入节点、中序遍历、前序遍历等功能,并展示了如何通过递归方式找到所有符合条件的路径。
256

被折叠的 条评论
为什么被折叠?



