import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Stack;
import org.junit.Test;
public class solution {
@Test
public void testFunc() throws Exception{
TreeNode root = new TreeNode(1);
TreeNode root2 = new TreeNode(2);
TreeNode root3 = new TreeNode(3);
root.left=root2;
root.right = root3;
preOrder(root);
}
//前序遍历的非递归实现---利用栈
public void preOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
while (p!=null || !stack.isEmpty()) {
while(p!=null) {
System.out.println(p.val);
stack.push(p);
p=p.left;
}
if (!stack.isEmpty()) {
p=stack.pop();
p=p.right;
}
}
}
}
本文介绍了一种使用栈实现二叉树前序遍历的非递归方法,并通过一个具体的例子展示了整个过程。该方法首先创建一个空栈,然后将根节点压入栈中。接下来进入循环,直到栈为空或者当前节点不为空。对于每个节点,先访问它,然后将其压入栈,并转向其左子节点。当遇到叶子节点时,则从栈中弹出元素并转向其右子节点。
4万+

被折叠的 条评论
为什么被折叠?



