File tree Expand file tree Collapse file tree 9 files changed +254
-1
lines changed Expand file tree Collapse file tree 9 files changed +254
-1
lines changed Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .BST ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+
8
+ /**
9
+ * Created by 周杰伦 on 2018/4/25.
10
+ */
11
+ public class BST中和为给定值的两个节点 {
12
+ public boolean findTarget (TreeNode root , int k ) {
13
+ if (root == null )return false ;
14
+ List <Integer > list = inorder (root , new ArrayList <>());
15
+ int left = 0 ;
16
+ int right = list .size () - 1 ;
17
+ while (left < right ) {
18
+ if (list .get (left ) + list .get (right ) > k ) {
19
+ right --;
20
+ }else if (list .get (left ) + list .get (right ) < k ) {
21
+ left ++;
22
+ }else return true ;
23
+ }
24
+ return false ;
25
+ }
26
+ public List <Integer > inorder (TreeNode root , List <Integer > list ) {
27
+ if (root == null ) return list ;
28
+ inorder (root .left , list );
29
+ list .add (root .val );
30
+ inorder (root .right , list );
31
+ return list ;
32
+ }
33
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .BST ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+
8
+ /**
9
+ * Created by 周杰伦 on 2018/4/25.
10
+ */
11
+ public class 在BST中查找两个节点之差的最小绝对值 {
12
+ public int getMinimumDifference (TreeNode root ) {
13
+ List <Integer > list = inorder (root , new ArrayList <>());
14
+ int min = Integer .MAX_VALUE ;
15
+ for (int i = 1 ;i < list .size ();i ++) {
16
+ if (Math .abs (list .get (i ) - list .get (i - 1 )) < min ) {
17
+ min = Math .abs (list .get (i ) - list .get (i - 1 ));
18
+ }
19
+ }
20
+ return min ;
21
+ }
22
+ public List <Integer > inorder (TreeNode root , List <Integer > list ) {
23
+ if (root == null ) return list ;
24
+ inorder (root .left , list );
25
+ list .add (root .val );
26
+ inorder (root .right , list );
27
+ return list ;
28
+ }
29
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .BST ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .*;
6
+
7
+ /**
8
+ * Created by 周杰伦 on 2018/4/25.
9
+ */
10
+ public class 寻找BST中出现次数最多的节点 {
11
+ public int [] findMode (TreeNode root ) {
12
+ ArrayList <Integer > res = new ArrayList <>();
13
+ List <Integer > list = inorder (root , new ArrayList <>());
14
+ HashMap <Integer , Integer > map = new HashMap <>();
15
+ int max = 0 ;
16
+ for (int i : list ) {
17
+ if (map .containsKey (i )) {
18
+ map .put (i , map .get (i ) + 1 );
19
+ max = Math .max (max ,map .get (i ));
20
+ }else {
21
+ map .put (i ,1 );
22
+ max = Math .max (max ,map .get (i ));
23
+ }
24
+ }
25
+ Set <Integer > set = map .keySet ();
26
+ for (int i : set ) {
27
+ if (map .get (i ) == max ) {
28
+ res .add (i );
29
+ }
30
+ }
31
+ int []arr = new int [res .size ()];
32
+ int index = 0 ;
33
+ for (int i : res ) {
34
+ arr [index ++] = i ;
35
+ }
36
+ return arr ;
37
+ }
38
+ public List <Integer > inorder (TreeNode root , List <Integer > list ) {
39
+ if (root == null ) return list ;
40
+ inorder (root .left , list );
41
+ list .add (root .val );
42
+ inorder (root .right , list );
43
+ return list ;
44
+ }
45
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .BST ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+
8
+ /**
9
+ * Created by 周杰伦 on 2018/4/25.
10
+ */
11
+ public class 寻找BST的第k个元素 {
12
+ public int kthSmallest (TreeNode root , int k ) {
13
+ if (root == null ) return 0 ;
14
+ List <Integer > list = inorder (root , new ArrayList <>());
15
+ return list .get (k - 1 );
16
+ }
17
+
18
+ public List <Integer > inorder (TreeNode root , List <Integer > list ) {
19
+ if (root == null ) return list ;
20
+ inorder (root .left , list );
21
+ list .add (root .val );
22
+ inorder (root .right , list );
23
+ return list ;
24
+ }
25
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .BST ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ /**
6
+ * Created by 周杰伦 on 2018/4/25.
7
+ */
8
+ public class 把BST每个节点的值都加上比它大的节点的值 {
9
+ //先遍历右子树,再遍历根节点,再遍历左子树,就是从大到小遍历,
10
+ // 每个遍历到的值加上之前的和就是新的值
11
+ public TreeNode convertBST (TreeNode root ) {
12
+ if (root == null ) return null ;
13
+ int sum = 0 ;
14
+ convertBST (root .right );
15
+ sum += root .val ;
16
+ root .val = sum ;
17
+ convertBST (root .left );
18
+ return root ;
19
+ }
20
+ }
Original file line number Diff line number Diff line change 1
- package 数据结构 .树 .遍历 ;
1
+ package 数据结构 .树 .层次遍历 ;
2
2
3
3
import 数据结构 .树 .TreeNode ;
4
4
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .遍历 ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+ import java .util .Stack ;
8
+
9
+ /**
10
+ * Created by 周杰伦 on 2018/4/25.
11
+ */
12
+ public class 中序非递归 {
13
+ public List <Integer > inorderTraversal (TreeNode root ) {
14
+ if (root == null ) return new ArrayList <>();
15
+ Stack <TreeNode > stack = new Stack <>();
16
+ List <Integer > list = new ArrayList <>();
17
+ TreeNode p = root ;
18
+ stack .push (p );
19
+ //p.left代表新进栈的值,stack里的是原来待遍历的值,两边都为空时说明遍历结束。
20
+ while (p .left != null || !stack .isEmpty ()) {
21
+ //先把左子树的节点进栈。
22
+ while (p .left != null ) {
23
+ p = p .left ;
24
+ stack .push (p );
25
+ }
26
+ //左下角节点出栈并访问,如果他有右子树,右子树进栈,并且退出循环
27
+ //进入第一个环节,将该右子树节点的所有左节点进栈,以此类推即可完成。
28
+ while (!stack .isEmpty ()) {
29
+ TreeNode t = stack .pop ();
30
+ list .add (t .val );
31
+ if (t .right != null ) {
32
+ stack .push (t .right );
33
+ p = t .right ;
34
+ break ;
35
+ }
36
+ }
37
+ }
38
+ return list ;
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .遍历 ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+ import java .util .Stack ;
8
+
9
+ /**
10
+ * Created by 周杰伦 on 2018/4/25.
11
+ */
12
+ public class 先序非递归 {
13
+ public List <Integer > preorderTraversal (TreeNode root ) {
14
+ if (root == null ) return new ArrayList <>();
15
+ Stack <TreeNode > stack = new Stack <>();
16
+ List <Integer > list = new ArrayList <>();
17
+ stack .push (root );
18
+ while (!stack .isEmpty ()) {
19
+ TreeNode t = stack .pop ();
20
+ list .add (t .val );
21
+ if (t .right != null ) {
22
+ stack .push (t .right );
23
+ }
24
+ if (t .left != null ) {
25
+ stack .push (t .left );
26
+ }
27
+ }
28
+ return list ;
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ package 数据结构 .树 .遍历 ;
2
+
3
+ import 数据结构 .树 .TreeNode ;
4
+
5
+ import java .util .ArrayList ;
6
+ import java .util .List ;
7
+ import java .util .Stack ;
8
+
9
+ /**
10
+ * Created by 周杰伦 on 2018/4/25.
11
+ */
12
+ public class 后序非递归 {
13
+ public List <Integer > postorderTraversal (TreeNode root ) {
14
+ if (root == null ) return new ArrayList <>();
15
+ Stack <TreeNode > stack = new Stack <>();
16
+ List <Integer > list = new ArrayList <>();
17
+ recur (stack , root );
18
+ while (!stack .isEmpty ()) {
19
+ list .add (stack .pop ().val );
20
+ }
21
+ return list ;
22
+ }
23
+
24
+ public void recur (Stack <TreeNode > stack , TreeNode root ) {
25
+ if (root == null ) return ;
26
+ stack .push (root );
27
+ recur (stack , root .right );
28
+ recur (stack , root .left );
29
+ return ;
30
+ }
31
+ }
You can’t perform that action at this time.
0 commit comments