JAVA 二叉树遍历,
分享于 点击 14058 次 点评:197
JAVA 二叉树遍历,
二叉树的定义如下:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
递归的版本很简单,下面仅列出非递归的版本。
//先序遍历
public void searchPreOrder(TreeNode root) {
Stack<TreeNode> s = new Stack<TreeNode>();
if (root == null) {
return;
}
while (root != null) {
System.out.println(root.val);
if (root.right != null) {
s.push(root.right);
}
if (root.left != null) {
root = root.left;
} else {
if (s.isEmpty()) {
break;
}
root = s.pop();
}
}
}
//中序遍历
public void searchMidOrder(TreeNode root) {
Stack<TreeNode> s = new Stack<TreeNode>();
while (root != null || (!s.isEmpty())) {
while (root != null) {
s.push(root);
root = root.left;
}
if (!s.isEmpty()) {
root = s.pop();
System.out.print(root.val + " ");
root = root.right;
}
}
}
//后序遍历
public void searchPostOrder(TreeNode root) {
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode t = null;
int flag = 1;
if (root == null) {
return;
}
do {
while (root != null) {
s.push(root);
root = root.left;
}
t = null;
flag = 1;
while ((!s.isEmpty()) && (flag == 1)) {
root = s.peek();
if (root.right == t) {
System.out.println(root.val);
t = root;
s.pop();
} else {
root = root.right;
flag = 0;
}
}
} while (!s.isEmpty());
}
//层次遍历
public void levelSearch(TreeNode root) {
Queue<TreeNode> s = new LinkedList<TreeNode>();
if (root == null) {
return;
}
s.add(root);
while (!s.isEmpty()) {
TreeNode t = s.poll();
System.out.println(t.val);
if (t.left != null) {
s.add(t.left);
}
if (t.right != null) {
s.add(t.right);
}
}
}
在这做个记录,方便以后查阅。
相关文章
- 暂无相关文章
用户点评