Day 25
1. Background
今天是学习java的第25天,今天学习的是objectStack,以及用这个实现二叉树的中序遍历。
2. Description
2.1About
今天的代码是先用Object类来实现栈,以实现一个代码实现所有的数据类型的效果。
所以栈的实现的代码直接把之前栈的代码搬过来,然后修修补补即可。
然后就是中序遍历了,这个倒是让我想了很久。
2.2 in-order vistit
我的理解是先建立一个栈,然后创建一个tempNode
,用这个来存要遍历的节点。
然后利用栈先进先出的特性,只要tempNode
不为空,就把这个节点压入栈中,然后向它的左孩子遍历。
而当tempNode
遍历到空之后,则说明已经到了树的最左边。
PS:此时说的最左边是一个相对的概念,应该说是压到栈中的节点的最左端
此时就可以开始出栈了,由于栈后进先出的特性,最左边的那个节点就被输出。
3. Code
3.1 Object Stack
package datastructure;
public class ObjectStack {
/**
* The depth.
*/
public static final int MAX_DEPTH = 10;
/**
* The actual depth.
*/
int depth;
/**
* The data.
*/
Object[] data;
/**
* Construct an empty object stack.
*/
public ObjectStack() {
depth = 0;
data = new Object[MAX_DEPTH];
} // Of the first constructor
public String toString() {
String resultString = "";
for (int i = 0; i < depth; i++) {
resultString += data[i];
} // Of for i
return resultString;
} // Of toString
/**
*************
* Push an element.
* @param paraChar The given element.
* @return Success or not.
* ************
*/
public boolean Push(Object paraObject) {
if (depth == MAX_DEPTH) {
System.out.println("Stack full");
return false;
} // Of if
data[depth] = paraObject;
depth++;
return true;
} // Of Push
/**
*************
* Pop an element.
* @return The poped char.
* ************
*/
public Object Pop() {
if (depth == 0) {
System.out.println("Nothing to pop");
return '\0';
} // Of if
Object resultObject = data[depth - 1];
depth--;
return resultObject;
} // Of Pop
/**
*
* 判断栈是否为空。
*
* @return Empty or not empty.
*/
public boolean isEmpty() {
if (depth == 0) {
return true;
} // Of if
return false;
} // Of isEmpty
public static void main(String[] args) {
ObjectStack tempStack = new ObjectStack();
for (char ch = 'a'; ch < 'm'; ch++) {
tempStack.Push(new Character(ch));
System.out.println("The current stack is: " + tempStack);
} // Of for i
char tempChar;
for (int i = 0; i < 12; i++) {
tempChar = ((Character)tempStack.Pop()).charValue();
System.out.println("Poped: " + tempChar);
System.out.println("The current stack is: " + tempStack);
} // Of for i
}
}
运行结果:
3.2 中序遍历
package datastructure;
import java.util.Arrays;
public class BinaryCharTree {
/**
* The value of node.
*/
char value;
/**
* 二叉树的左孩子。
*/
BinaryCharTree leftChild;
/**
* 二叉树的右孩子。
*/
BinaryCharTree rightChild;