
Question
给定一个二叉树,打印每个具有负斜率()的对角线的所有节点。假设节点的左,右子与父节点成45度角。
1
/
2 3
/ /
4 5 6 7
/
8 9
输出:
1 3 7 9
2 5 6
4 8
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
import java.util.HashMap; import java.util.Map.Entry; import java.util.Vector;
public class A053 { static class TreeNode{ int data; TreeNode left; TreeNode right; TreeNode(int data) { this.data=data; left = null; right =null; } } static void diagonalPrintUtil(TreeNode root,int d, HashMap<Integer,Vector<Integer>> diagonalPrint){ if (root == null) return; Vector<Integer> k = diagonalPrint.get(d); if (k == null) { k = new Vector<>(); k.add(root.data); } else { k.add(root.data); } diagonalPrint.put(d,k); diagonalPrintUtil(root.left, d + 1, diagonalPrint); diagonalPrintUtil(root.right, d, diagonalPrint); } static void diagonalPrint(TreeNode root) { HashMap<Integer,Vector<Integer>> diagonalPrint = new HashMap<>(); diagonalPrintUtil(root, 0, diagonalPrint); //System.out.println("Diagonal Traversal of Binnary Tree"); for (Entry<Integer, Vector<Integer>> entry : diagonalPrint.entrySet()) { //Spliterator<Integer> a = entry.getValue().spliterator(); //System.out.println(entry.getValue()); //System.out.println(entry.getValue().size()); for(int i=0;i<entry.getValue().size();i++) { System.out.print(entry.getValue().get(i)+" "); } System.out.println(); } } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); root.right.left.left = new TreeNode(8); root.right.right.right = new TreeNode(9); diagonalPrint(root); } }
|
近期评论