public List<Integer> preorderTraversal(TreeNode root) {
System.out.println("前序遍历:");
List<Integer> list = new ArrayList<>();
if (root != null) {
//利用栈结构的特性,模仿递归遍历
Stack<TreeNode> stack = new Stack<TreeNode>();
//先放入头节点
stack.push(root);
//循环的终止条件是栈非空
while (!stack.isEmpty()) {
/*
* 因为先序遍历是 根左右 所以先将根节点打印输出
* 再将根节点的右子树压入栈中,因为栈结构是先入后出的结构,要先打印左子树节点
* 所以后压入左子树可以使得他先出来,达到先序遍历的目的
*/
TreeNode cur = stack.pop();
list.add(cur.val);
if (cur.right != null) {
stack.push(cur.right);
}
if (cur.left != null) {
stack.push(cur.left);
}
}
}
return list;
}
【JAVA】二叉树的非递归前序遍历
最新推荐文章于 2024-08-19 17:19:27 发布