package com.interview.books.svinterview; import com.interview.leetcode.utils.TreeNode; import java.util.Stack; /** * Created_By: stefanie * Date: 14-12-8 * Time: 下午8:03 */ public class SV18_PathPrinterIteractive { public void print(TreeNode root){ Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode prev = null; if(root != null) stack.push(root); while(stack.size() > 0){ TreeNode node = stack.peek(); if(prev == null || prev.left == node || prev.right == node){ if(node.left != null) stack.push(node.left); else if(node.right != null) stack.push(node.right); } else if(node.left == prev){ if(node.right != null) stack.push(node.right); } else { if(node.left == null && node.right == null){ printPath(stack, node); } stack.pop(); } prev = node; } } public void printPath(Stack<TreeNode> nodes, TreeNode node){ System.out.printf("Path of %d is: ", node.val); for(int i = nodes.size() - 1; i >= 0; i--){ System.out.print(nodes.get(i).val + " "); } System.out.println(); } public static void main(String[] args){ TreeNode root = TreeNode.sampleBST(); SV18_PathPrinterIteractive printer = new SV18_PathPrinterIteractive(); printer.print(root); } }