Java中使用迭代方式遍历二叉树的函数实现
发布时间:2023-07-01 04:21:25
在Java中,可以使用迭代的方式遍历二叉树。迭代遍历二叉树的方法有三种:前序遍历、中序遍历和后序遍历。
1. 前序遍历(Pre-order traversal)
前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树。
可以使用栈来实现前序遍历。首先将根节点入栈,然后开始循环,直到栈为空。在循环中,先弹出栈顶节点,访问该节点的值,然后将其右子节点入栈(如果存在),最后将其左子节点入栈(如果存在)。
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val + " ");
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
2. 中序遍历(In-order traversal)
中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。
可以使用栈来实现中序遍历。首先将根节点入栈,然后开始循环,直到栈为空。在循环中,如果当前节点不为空,将其左子节点入栈,然后将当前节点置为其左子节点;如果当前节点为空,弹出栈顶节点,访问该节点的值,然后将当前节点置为其右子节点。
public void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.left;
}
node = stack.pop();
System.out.print(node.val + " ");
node = node.right;
}
}
3. 后序遍历(Post-order traversal)
后序遍历是指先遍历左子树,然后遍历右子树,最后访问根节点。
可以使用栈来实现后序遍历。使用两个栈,一个栈用于存储遍历顺序的节点,一个栈用于存储输出顺序的节点。首先将根节点入栈1,然后开始循环,直到栈1为空。在循环中,从栈1中弹出节点,将其压入栈2,然后将其左子节点和右子节点依次入栈1。最后,从栈2中依次弹出节点,访问它们的值。
public void postorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(root);
while(!stack1.isEmpty()) {
TreeNode node = stack1.pop();
stack2.push(node);
if (node.left != null) {
stack1.push(node.left);
}
if (node.right != null) {
stack1.push(node.right);
}
}
while(!stack2.isEmpty()) {
TreeNode node = stack2.pop();
System.out.print(node.val + " ");
}
}
以上就是使用迭代方式遍历二叉树的函数实现,分别是前序遍历、中序遍历和后序遍历。可以根据具体需求选择对应的遍历方式。
