tag: 小米面试题
备注: 小米经典面试题, 多个朋友不同时期,不同研发岗位面试中都碰到过
思路:
(1)二叉序的中序遍历后有序
(2)用一个pre指针辅助
思路二:递归如何做???
1 package com.zhaochao.tree;
2
3 import java.util.ArrayList;
4 import java.util.Stack;
5
6 /**
7 * Created by zhaochao on 17/1/23.
8 */
9 public class BST2DLL {
10
11 public ArrayList<TreeNode> bst = new ArrayList<TreeNode>();
12
13
14 // 中序遍历
15 public ArrayList<Integer> inorder(TreeNode root) {
16 ArrayList<Integer> result = new ArrayList<Integer>();
17 if(root == null) {
18 return result;
19 }
20
21 Stack<TreeNode> stack = new Stack<TreeNode>();
22
23 while(root != null || !stack.isEmpty()) {
24 while(root != null) {
25 stack.push(root);
26 root = root.left;
27 }
28 TreeNode node = stack.peek();
29 result.add(node.val);
30 stack.pop();
31 root = node.right;
32 }
33 return result;
34 }
35
36
37 /*
38 中序遍历过程中进行指针修改
39 用一个pre指针指向left孩子
40 current node 的右孩子为右结点的左左下结点,所以在下一次遍历时修改即可。 pre.next = current node 有点技巧
41 if(pre != null) { pre.right = node; }
42 pre = node;
43 */
44
45 public void bst2DLL(TreeNode root) {
46
47 if(root == null) {
48 return;
49 }
50
51 TreeNode pre = null;
52 Stack<TreeNode> stack = new Stack<TreeNode>();
53 while(root != null || !stack.isEmpty()) {
54 while(root != null) {
55 stack.push(root);
56 root = root.left;
57 }
58 TreeNode node = stack.peek();
59 bst.add(node);
60 node.left = pre;
61 if(pre != null) {
62 pre.right = node;
63 }
64 pre = node;
65 stack.pop();
66 root = node.right;
67 }
68 }
69
70 public static void main(String[] args) {
71
72 TreeNode root = new TreeNode(0);
73 TreeNode node1 = new TreeNode(1);
74 TreeNode node2 = new TreeNode(2);
75 TreeNode node3 = new TreeNode(3);
76
77 root.left = node1;
78 root.right = node2;
79 node2.left = node3;
80
81 BST2DLL test = new BST2DLL();
82 test.bst2DLL(root);
83
84 for(int i = 0 ; i < test.bst.size(); i++) {
85 System.out.print(test.bst.get(i).val + " ");
86 if(test.bst.get(i).left != null) {
87 System.out.print("left = "+test.bst.get(i).left.val + " ");
88 } else {
89
90 System.out.print("left = null" + " ");
91 }
92 if(test.bst.get(i).right != null) {
93 System.out.println("right = "+test.bst.get(i).right.val);
94 } else {
95 System.out.println("right = null");
96 }
97 }
98
99 }
100
101 }