-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBinaryTree.java
More file actions
121 lines (108 loc) · 2.93 KB
/
Copy pathBinaryTree.java
File metadata and controls
121 lines (108 loc) · 2.93 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/**
* BinaryTree.java
*/
package binarytree;
/**
* Binary tree
* @author LiuChen
* @date 2016年11月24日 上午11:05:22
*
*/
public class BinaryTree<T> {
protected BinaryTreeNode<T> root;
public BinaryTree() {
this.root = null;
}
public BinaryTree(T value) {
this.root = new BinaryTreeNode<T>(value);
}
public BinaryTreeNode<T> getRoot() {
return this.root;
}
/**
* Insert a node into tree.
*
* @param value
* @return
*/
public BinaryTree<T> insert(T value) {
BinaryTreeNode<T> newNode = new BinaryTreeNode<T>(value);
if(this.root == null) {
this.root = newNode;
return this;
}
BinaryTreeNode<T> temp = this.root;
while(temp.getLeftNode() != null) {
if(temp.getRightNode() == null) {
temp.setRightNode(newNode);
return this;
}
temp = temp.getLeftNode();
}
temp.setLeftNode(newNode);
return this;
}
/**
* Get node count.
* @param node
* @return
*/
public int getNodeCount(BinaryTreeNode<T> node) {
if(node == null) {
return 0;
}
return getNodeCount(node.getLeftNode()) + getNodeCount(node.getRightNode()) + 1;
}
/**
* Get tree's depth.
* @param node
* @return
*/
public int getDepth(BinaryTreeNode<T> node) {
if(node == null) {
return 0;
}
int depthLeft = getDepth(node.getLeftNode());
int depthRight = getDepth(node.getRightNode());
return depthLeft > depthRight ? (depthLeft + 1) : (depthRight + 1);
}
public void visit(BinaryTreeNode<T> node) {
System.out.print("NODE[" + node.getValue() + "]-->");
}
/**
* PreOrderTraverse
* @param root
*/
public void preOrderTraverse(BinaryTreeNode<T> root) {
if(root == null) {
return;
}
this.visit(root); // visit root node
preOrderTraverse(root.getLeftNode()); // visit left child tree
preOrderTraverse(root.getRightNode()); // visit right child tree
}
/**
* InOrderTraverse
* @param root
*/
public void inOrderTraverse(BinaryTreeNode<T> root) {
if(root == null) {
return;
}
inOrderTraverse(root.getLeftNode()); // visit left child tree
this.visit(root); // visit root node
inOrderTraverse(root.getRightNode()); // visit right child tree
}
/**
* PostOrderTraverse
* @param root
*/
public void postOrderTraverse(BinaryTreeNode<T> root) {
if(root == null) {
return;
}
postOrderTraverse(root.getLeftNode()); // visit left child tree
postOrderTraverse(root.getRightNode()); // visit right child tree
this.visit(root); // visit root node
}
}