// 中序遍历 非递归算法
public static void InOrder2(TreeNode root)
{
if(root==null) return;
Stack<TreeNode> stk = new Stack<TreeNode>();
TreeNode p = root;//辅助节点
stk.add(p);
while(stk.isEmpty() == false)
{
//只要你有左孩子,就将左孩子压入栈中
if(p != null && p.left != null)
{
stk.add(p.left);
p = p.left;
}
else // 左孩子没了,处理栈顶元素,并观察是否有右节点
{
p = stk.pop();//弹出栈顶节点 左孩子--->根节点
System.out.print(p.val+" ");//访问
if(p != null && p.right != null) //如果栈点元素有右孩子的话,将有节点压入栈中
{
stk.add(p.right);
p = p.right;
}
else // 叶子节点处理完成,没左孩子也没右孩子
p = null;//p=stk.pop;已经访问过p了,p设置为null,防止进入重复寻找做孩子的循环
}
}
}
java 中序非递归遍历
最新推荐文章于 2024-04-08 10:43:48 发布