本篇文章给出二叉树的中序遍历的java实现。
树结构:
public class TreeNode{
int val;
TreeNode left;
TreeNode right;
// 构造函数
TreeNode(int x){
val = x;
}
}
递归版:
递归程序还是非常容易理解的。
public void inOrderTravel(TreeNode node){
if(node != null){
inOrderTravel(node.left);
visit(node);
inOrderTravel(node.right);
}
}
// 其实这里的visit函数是一个抽象的函数,可以是一些其他的操作
// 比如leetcode中的不是将该值打印出来,而是放到一个数组中,只要在这里做出相应的改变即可。
public void visit(TreeNode node){
System.out.print(node.val + " ");
}
重点在与迭代版本,老规矩,我们依然使用栈来实现。
public void inOrderTravel(TreeNode node){
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
while(curr != null || !stack.isEmpty()){
while(curr != null){
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
visit(curr);
curr = curr.right;
}
}
// 其实这里的visit函数是一个抽象的函数,可以是一些其他的操作
// 比如leetcode中的不是将该值打印出来,而是放到一个数组中,只要在这里做出相应的改变即可。
public void visit(TreeNode node){
System.out.print(node.val + " ");
}