Skip to content

Commit ef940ac

Browse files
committed
update
1 parent efc0bc7 commit ef940ac

File tree

6 files changed

+144
-0
lines changed

6 files changed

+144
-0
lines changed
638 KB
Loading
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package problem24;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
7+
* 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
8+
* Created by bjyangrubing on 2016/8/18.
9+
*/
10+
public class SequeneBST
11+
{
12+
public boolean verifySquenceOfBST(int[] sequence)
13+
{
14+
if (sequence == null || sequence.length <= 0)
15+
return false;
16+
int length = sequence.length;
17+
int root = sequence[length - 1];//后序结果, 最后一个元素为根节点
18+
19+
int i = 0;
20+
for (; i < length - 1; i++)
21+
{
22+
if (root < sequence[i])//从左向右,找第一个大于root的下标,确定左子树的范围
23+
break;
24+
}
25+
26+
int j = i;
27+
//遍历右子树,如果右子树的值小于root,则直接返回false
28+
for (; j < length - 1; j++)
29+
{
30+
if (root > sequence[j])
31+
return false;
32+
}
33+
//判断左子树是否为BST,只有当i>0时才有左子树
34+
boolean left = true;
35+
if (i > 0)
36+
{
37+
verifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i));
38+
}
39+
//判断右子树是否为BST,只有当i<length-1时才有右子树
40+
boolean right = true;
41+
if (i < length - 1)
42+
{
43+
verifySquenceOfBST(Arrays.copyOfRange(sequence, i, length - 1));
44+
}
45+
46+
return left && right;
47+
}
48+
49+
public static void main(String[] args)
50+
{
51+
int[] sequence =
52+
{ 5, 7, 6, 9, 11, 10, 8 };
53+
SequeneBST s = new SequeneBST();
54+
boolean result = s.verifySquenceOfBST(sequence);
55+
System.out.println(result);
56+
}
57+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package problem25;
2+
3+
import utils.BinaryTreeNode;
4+
5+
import java.util.ArrayList;
6+
7+
/**
8+
* 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
9+
* 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
10+
* Created by bjyangrubing on 2016/8/18.
11+
*/
12+
public class PathInTree {
13+
14+
//返回的list
15+
private ArrayList<ArrayList<Integer>> rtList = new ArrayList<ArrayList<Integer>>();
16+
17+
//存储当前路径的list
18+
private ArrayList<Integer> currentList = new ArrayList<Integer>();
19+
20+
public ArrayList<ArrayList<Integer>> FindPath(BinaryTreeNode root, int target) {
21+
//首先判断root是否为null,为null直接返回rtList
22+
if (root == null)
23+
return rtList;
24+
currentList.add(root.value);
25+
target -= root.value;
26+
27+
FindPath(root.leftNode, target);
28+
FindPath(root.rightNode, target);
29+
//如果是叶子节点,且target == 0,说明这个路径是正确的,添加到rtList中
30+
if (target == 0 && root.leftNode == null && root.rightNode == null) {
31+
rtList.add(new ArrayList<Integer>(currentList));
32+
}
33+
//在递归返回之前,将路径的最后一个值移除掉
34+
currentList.remove(currentList.size() - 1);
35+
36+
return rtList;
37+
38+
}
39+
}
619 KB
Loading
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package problem24;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
/**
7+
* Created by bjyangrubing on 2016/8/18.
8+
*/
9+
public class SequeneBSTTest
10+
{
11+
12+
@Test
13+
public void test()
14+
{
15+
SequeneBST s = new SequeneBST();
16+
17+
Assert.assertEquals(true, s.verifySquenceOfBST(new int[]
18+
{ 5, 7, 6, 9, 11, 10, 8 }));
19+
20+
Assert.assertEquals(false, s.verifySquenceOfBST(new int[]
21+
{ 7, 4, 6, 5 }));
22+
}
23+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package problem25;
2+
3+
import org.junit.Test;
4+
import utils.BinaryTreeNode;
5+
6+
/**
7+
* Created by bjyangrubing on 2016/8/18.
8+
*/
9+
public class PathInTreeTest
10+
{
11+
@Test
12+
public void test()
13+
{
14+
BinaryTreeNode root = new BinaryTreeNode();
15+
BinaryTreeNode node1 = new BinaryTreeNode();
16+
BinaryTreeNode node2 = new BinaryTreeNode();
17+
BinaryTreeNode node3 = new BinaryTreeNode();
18+
BinaryTreeNode node4 = new BinaryTreeNode();
19+
BinaryTreeNode node5 = new BinaryTreeNode();
20+
21+
PathInTree pathInTree = new PathInTree();
22+
23+
}
24+
25+
}

0 commit comments

Comments
 (0)