您的位置:首页 > 其它

二叉树的遍历

2017-12-13 14:48 107 查看
二叉树的基本遍历,包括前序、中序和后序,实现方式有递归和非递归;

public class TreeNode {
Object val;
TreeNode left;
TreeNode right;
TreeNode(Object x) { val = x; }
}


public class BinaryTreeTraversal {

public static void main(String[] args) {
TreeNode root = new TreeNode("A");
TreeNode l1 = new TreeNode("B");
TreeNode l2 = new TreeNode("C");
TreeNode l3 = new TreeNode("D");
TreeNode l4 = new TreeNode("E");
TreeNode l5 = new TreeNode("F");
root.left = l1;
l1.right = l2;
root.right = l3;
l3.left = l4;
l3.right = l5;

inOrder(root);
inOrder1(root);

}

public static void preOrder(TreeNode root){
if(root != null){
visit(root);
preOrder(root.left);
preOrder(root.right);
}
}

public static void inOrder(TreeNode root){
if(root != null){
inOrder(root.left);
visit(root);
inOrder(root.right);
}
}

public static void postOrder(TreeNode root){
if(root != null){
postOrder(root.left);
postOrder(root.right);
visit(root);
}
}

public static void preOrder1(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
while(p != null || !stack.empty()){
while(p != null){
visit(p);
stack.push(p);
p = p.left;
}

if(!stack.empty()){
p = stack.pop();
p = p.right;
}
}
}

public static void inOrder1(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
while(p != null || !stack.empty()){
while(p != null){
stack.push(p);
p=p.left;
}

if(!stack.empty()){
p = stack.pop();
visit(p);
p = p.right;
}
}

}

public static void postOrder1(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root, q=null;
while(p != null){
while(p != null){
stack.push(p);
p = p.left;
}

while(p != null && (p.right == null || p.right == q)){
visit(p);
q = p;
if(stack.empty()){
return;
}
p = stack.pop();
}

stack.push(p);
p = p.right;
}

}

}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 遍历