微软面试100题系列---在二叉树中找出和为某一定值的所有路径
2016-09-02 05:39
489 查看
题目
输入一个整数和一棵二叉树;从树的根节点开始往下访问一直到叶节点,所经过的所有节点形成一条路径。打印出和输入整数相等的所有路径。实现
递归+回溯思路:保存搜索路径,记录当前路径上所有元素的和。如果当前节点为叶子节点,并且当前节点值和sum和=data,则满足条件,打印后递归返回到父节点;如果不是叶子节点,则继续访问子节点;
当访问到某一节点时,把该节点的值添加到当前变量和sum中,且把该节点压入栈中;
若节点为叶子节点,且sum==期望的和,则打印出栈内容;
若节点不是叶子节点,继续访问左孩子节点和右孩子节点;
从栈中移除该节点,并从sum和中减去该节点的值(回溯);
代码实现:
import java.util.Stack; public class Num4 { public static int sum=0; public static Stack stack=new Stack<BinaryTreeNode>(); public static Stack stack_2=new Stack<BinaryTreeNode>(); public static void main(String[] args) { BinaryTreeNode root=null; //create a binaryTree to test root=createTree(root); pathTree(root,22); } public static BinaryTreeNode createTree(BinaryTreeNode root){ root=new BinaryTreeNode(8); BinaryTreeNode node=new BinaryTreeNode(5); root.left=node; node=new BinaryTreeNode(12); root.right=node; node=new BinaryTreeNode(7); root.left.left=node; return root; } public static void pathTree(BinaryTreeNode root,int value){ sum+=root.value; stack.push(root); if(root.left==null && root.right==null && sum==value){ printPath(); } if(root.left!=null){ pathTree(root.left,value); } if(root.right!=null){ pathTree(root.right,value); } if(!stack.isEmpty()) { stack.pop(); sum-=root.value; } } private static void printPath() { while(!stack.isEmpty()){ BinaryTreeNode node= (BinaryTreeNode) stack.pop(); stack_2.push(node); } while(!stack_2.isEmpty()){ BinaryTreeNode node=(BinaryTreeNode) stack_2.pop(); stack.push(node); System.out.print(node.value+" "); } System.out.println(); } } class BinaryTreeNode{ int value; BinaryTreeNode left; BinaryTreeNode right; public BinaryTreeNode(int value){ this.value=value; this.left=null; this.right=null; } }
相关文章推荐
- 面试100题:4.在二叉树中找出和为某一值的所有路径
- 【从零单排之微软面试100题系列】04之二叉树中和为某一值的路径
- 在二元树中找出何为某一值的所有路径 【微软面试100题 第四题】
- 微软等数据结构+算法面试100题(45)-- 在二元树中找出和为某一值的所有路径
- 微软面试100题-4.在二元树中找出和为某一值的所有路径
- 微软等数据结构+算法面试100题(21)--二叉树打印到叶子节点的所有路径
- 二元树中找出何为某一值的所有路径 【微软面试100题 第四题】
- 微软面试100题系列---求二叉树中节点的最大距离
- 【微软谷歌面试100题--【21】从1-n中找出和为m的所有组合
- 【100题】二叉树中找出和为某一值的所有路径
- 微软面试100题系列---二叉树的层次遍历
- 面试100题004--二元树中找出和为某一值的所有路径
- 算法面试100题——4.在二元树中找出和为某一值的所有路径
- 微软算法100题04 二叉树中查找和为某值的所有路径
- 微软面试100题之一,之四 二叉查找树变双向链表 和为某一值的所有路径
- 微软面试100题系列---二叉树的深度
- 微软100题(4) 在二元树中找出和为某一值的所有路径
- <仅是自己做笔记。。。系列x>所有系列题目都来自v_JULY_v前辈的:精选微软等公司经典的算法面试100题
- 面试100题:4.在二元树中找出和为某一值的所有路径
- 程序员面试100题(算法)之二叉树中找出和为某一值的所有路径(含二叉树前序创建、遍历)