这两天一直忙着考试,最近才刚刚有时间补上上次的坑。
这次完善了遍历。有前中后的递归和非递归方法,还有层序遍历。
递归就不讲了。非递归用到了栈,层序遍历用到了队列。
非递归:先创建一个空栈。在新建一个node节点并赋值root。如果node不为空或栈不为空就一直循环。循环体中的内容见代码,很容易理解。另外要注意非递归后序遍历时,需要有个标记记录左子树是否被访问过,如果被访问过,才能输出。
层序遍历,先将root放入队列中,每次取出后,将不空的node节点的左右子树放入队里中。直到队列为空结束。
package tree.binarytree;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class BinaryTree {
private static Node root;
private static String [] treeNodes;
static int index;
public BinaryTree(String tree) {
root = new Node("");
treeNodes = tree.split(",");
index = 0;
createTree(root);
}
public static Node createTree(Node node) {
String data = treeNodes[index];
System.out.println("index "+index+" data "+data);
in