您的位置:首页 > 编程语言 > Java开发

二叉树遍历 递归与非递归 Java

2015-09-25 15:31 656 查看
程序如下:

import java.util.Stack;

public class TreeNode {
public int val;

public TreeNode(int val) {
this.val = val;
}

public TreeNode left;
public TreeNode right;

public static void main(String[] args) {
TreeNode a1 = new TreeNode(1);
TreeNode a2 = new TreeNode(2);
TreeNode a3 = new TreeNode(3);
TreeNode a4 = new TreeNode(4);
TreeNode a5 = new TreeNode(5);
TreeNode a6 = new TreeNode(6);
a1.left = a2;
a2.left = a3;
a2.right = a4;
a1.right = a5;
a5.right = a6;
xianXu(a1);
System.out.println();
xianXu2(a1);
System.out.println();
zhongXu(a1);
System.out.println();
zhongXu2(a1);
System.out.println();
houXu(a1);
System.out.println();
houXu2(a1);
}

public static void xianXu(TreeNode root) {
if (root == null)
return;
System.out.print(root.val + " ");
xianXu(root.left);
xianXu(root.right);
}

public static void xianXu2(TreeNode root) {
if (root == null)
return;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while (stack.size() > 0 || cur != null) {
while (cur != null) {
stack.add(cur);
System.out.print(cur.val + " ");
cur = cur.left;
}
cur = stack.pop();
cur = cur.right;
}
}

public static void zhongXu(TreeNode root) {
if (root == null)
return;
zhongXu(root.left);
System.out.print(root.val + " ");
zhongXu(root.right);
}

public static void zhongXu2(TreeNode root) {
if (root == null)
return;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while (stack.size() > 0 || cur != null) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
System.out.print(cur.val + " ");
cur = cur.right;
}
}

public static void houXu(TreeNode root) {
if (root == null)
return;
houXu(root.left);
houXu(root.right);
System.out.print(root.val + " ");
}

public static void houXu2(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
TreeNode pre = root;
while (stack.size() > 0 || cur != null) {
while (cur != null) {
stack.push(cur);
pre = cur;
cur = cur.left;
}
TreeNode temp = stack.peek().right;
if (temp == null || temp == pre) {
cur = stack.pop();
System.out.print(cur.val + " ");
pre = cur;
cur = null;
} else {
cur = temp;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: