本篇文章主要是利用Java语言实现二叉树的前序遍历操作。
首先用java实现二叉树这个数据结构。
public class TreeNode{
int val;
TreeNode left;
TreeNode right;
// 构造函数
TreeNode(int x){
val = x;
}
}
递归版的前序遍历代码如下:
public void preOrderTravel(TreeNode node){
if(node != null){
visit(node);
preOrderTravel(node.left);
preOrderTravel(node.right);
}
}
// 其实这里的visit函数是一个抽象的函数,可以是一些其他的操作
// 比如leetcode中的不是将该值打印出来,而是放到一个数组中,只要在这里做出相应的改变即可。
public void visit(TreeNode node){
System.out.print(node.val + " ");
}
迭代版的二叉树前序遍历,代码如下:
其实递归问题的转成迭代的主要思路就是利用栈。
public void preOrderTravel(TreeNode node){
Stack<TreeNode> treeStack=new Stack<>();
if(root==null){ //如果为空树则返回
return;
}
treeStack.push(root);
while(!treeStack.isEmpty()){
TreeNode tempNode=treeStack.pop(); // 出栈
// 仍然这里的visit函数是一个抽象的概念
visit(tempNode);
if(tempNode.right != null){
treeStack.push(tempNode.right);
}
if(tempNode.left != null){
treeStack.push(tempNode.left);
}
}
}
// 其实这里的visit函数是一个抽象的函数,可以是一些其他的操作
// 比如leetcode中的不是将该值打印出来,而是放到一个数组中,只要在这里做出相应的改变即可。
public void visit(TreeNode node){
System.out.print(node.val + " ");
}