// 先序,递归
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
/*用root在这里写业务代码*/
preorderTraversal(root.left);
preorderTraversal(root.right);
}
// 先序,迭代
public void preorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
/*用root在这里写业务代码*/
root = root.left;
}
root = stack.pop();
root = root.right;
}
}
// 中序,递归
public void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
inorderTraversal(root.left);
/*用root在这里写业务代码*/
inorderTraversal(root.right);
}
// 中序,迭代
public void inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
/*用root在这里写业务代码*/
root = root.right;
}
}
// 后序,递归
public void postorderTraversal(TreeNode root) {
if (root == null) {
return;
}
inorderTraversal(root.left);
inorderTraversal(root.right);
/*用root在这里写业务代码*/
}
// 后序,迭代
public void postorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
TreeNode prev = null;
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (root.right == null || root.right == prev) {
/*用root在这里写业务代码*/
prev = root;
root = null;
} else {
stack.push(root);
root = root.right;
}
}
}
二叉树的递归和迭代遍历模板
于 2022-11-19 22:07:56 首次发布