用 java 写一个二叉树的非递归遍历
时间: 2023-08-31 22:44:20 浏览: 140
### 回答1:
我可以提供一些参考代码,但是最终的实现取决于你的应用场景。首先,需要为二叉树定义一个类,然后实现一个非递归的遍历方法:
public class BinaryTree {
Node root;
// 非递归遍历
public void traverseWithoutRecursion(){
Stack<Node> stack = new Stack<>();
Node currentNode = root;
while(currentNode != null || !stack.isEmpty()){
// 向左遍历
while(currentNode != null){
stack.push(currentNode);
currentNode = currentNode.left;
}
// 处理右子树
if(!stack.isEmpty()){
currentNode = stack.pop();
// 处理当前节点,如打印等
System.out.print(currentNode.data + " ");
currentNode = currentNode.right;
}
}
}
}
### 回答2:
要用Java写一个二叉树的非递归遍历,我们可以使用栈来辅助实现。
首先,需要先定义一个二叉树的节点类,包含节点值、左子节点和右子节点。代码如下:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
```
然后,我们可以使用迭代的方式来实现二叉树的非递归遍历。这里以中序遍历为例:
```java
import java.util.Stack;
public class BinaryTreeTraversal {
public static void inorderTraversal(TreeNode root) {
if (root == null) return;
Stack<TreeNode> stack = new Stack<>();
TreeNode current = root;
while (current != null || !stack.isEmpty()) {
while (current != null) {
stack.push(current);
current = current.left;
}
current = stack.pop();
System.out.print(current.val + " ");
current = current.right;
}
}
public static void main(String[] args) {
/*
* 构建二叉树:
* 1
* / \
* 2 3
* / \
* 4 5
*/
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
System.out.println("中序遍历结果:");
inorderTraversal(root);
}
}
```
上述代码中,我们使用一个while循环来依次将左子节点压入栈中,直到左节点为空。然后出栈一个节点,并打印其值,再访问右子节点。重复这个过程,直到遍历完所有节点。
测试代码中先构建了一个二叉树。然后调用inorderTraversal方法进行中序遍历,并输出结果。
以上就是用Java写一个二叉树的非递归遍历的方法。
阅读全文