今天做leetcode上碰到了这个知识点,正好写个帖子来记录一下。
首先,树的结构
public class TreeNode {
* int val; //节点的值
* TreeNode left;
* TreeNode right;
* TreeNode(int x) {
val = x; }
* }
一、前序遍历(中 左 右)
前序遍历(DLR,lchild,data,rchild),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。
递归解法
public static void preOrderRecur(TreeNode head) {
if (head == null) {
return;
}
System.out.print(head.val + " "); //前序遍历并输出
preOrderRecur(head.left);
preOrderRecur(head.right);
}
可以发现递归的代码非常简单,接下来看一下迭代是如何实现。
迭代解法
本质上是在模拟递归,因为在递归的过程中使用了系统栈,所以在迭代的解法中常用Stack来模拟系统栈。
public static void preOrderIteration(TreeNode head) {
if (head == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
while (head!=null || !stack.isEmpty