public class Main {
static List<Integer> res = new ArrayList<Integer>();
public static void preOrderRecusive(TreeNode node) {
if (node == null) return;
res.add(node.val);
preOrderRecusive(node.left);
preOrderRecusive(node.right);
}
public static void preOrderNonRecusive(TreeNode node) {
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode cur = node;
while (cur != null || !s.isEmpty()) {
while (cur != null) {
res.add(cur.val);
s.push(cur);
cur = cur.left;
}
cur = s.pop();
cur = cur.right;
}
}
public static void inOrderRecusive(TreeNode node) {
if (node == null) return;
inOrderRecusive(node.left);
res.add(node.val);
inOrderRecusive(node.right);
}
public static void inOrderNonRecusive(TreeNode node) {
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode cur = node;
while (cur != null || !s.isEmpty()) {
while (cur != null) {
s.push(cur);
cur = cur.left;
}
cur = s.pop();
res.add(cur.val);
cur = cur.right;
}
}
public static void postOrderRecusive(TreeNode node) {
if (node == null) return;
postOrderRecusive(node.left);
postOrderRecusive(node.right);
res.add(node.val);
}
public static void postOrderNonRecusive(TreeNode node) {
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode cur = node, last = null;
while (cur != null || !s.isEmpty()) {
while (cur != null) {
s.push(cur);
cur = cur.left;
}
cur = s.peek();
if (cur.right == null || cur.right == last) {
res.add(cur.val);
s.pop();
last = cur;
cur = null;
} else {
cur = cur.right;
}
}
}
public static void levelOrder(TreeNode node) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(node);
while (!queue.isEmpty()) {
TreeNode cur = queue.poll();
res.add(cur.val);
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
}
public static void print(List<Integer> list) {
for (int i : list)
System.out.print(i + "\t");
System.out.println();
}
public static void main(String[] args) {
TreeNode node4 = new TreeNode(4);
TreeNode node2 = new TreeNode(2);
TreeNode node6 = new TreeNode(6);
TreeNode node1 = new TreeNode(1);
TreeNode node3 = new TreeNode(3);
TreeNode node5 = new TreeNode(5);
TreeNode node7 = new TreeNode(7);
node4.left = node2;
node4.right = node6;
node2.left = node1;
node2.right = node3;
node6.left = node5;
node6.right = node7;
//preOrderRecusive(node4);
//preOrderNonRecusive(node4);
//inOrderRecusive(node4);
//inOrderNonRecusive(node4);
//postOrderRecusive(node4);
postOrderNonRecusive(node4);
print(res);
}
}
二叉树的遍历---递归与非递归--java
猜你喜欢
转载自blog.csdn.net/weixin_39590058/article/details/88701766
今日推荐
周排行