西宁集团网站建设,沈阳之道网站建设,淄博天一建设项目招标代理有限公司网站,php美食网站开发的意义https://blog.csdn.net/qiuxinfa123/article/details/84880786 2.先序遍历。非递归先序遍历的思路如下#xff1a; 1.先将根节点入栈 2.访问根节点 3.如果根节点存在右孩子#xff0c;则将右孩子入栈 4.如果根节点存在左孩子#xff0c;则将左孩子入栈#xff08;注意…https://blog.csdn.net/qiuxinfa123/article/details/84880786 2.先序遍历。非递归先序遍历的思路如下 1.先将根节点入栈 2.访问根节点 3.如果根节点存在右孩子则将右孩子入栈 4.如果根节点存在左孩子则将左孩子入栈注意一定是右孩子先入栈然后左孩子入栈 5.重复2-4
//先序遍历非递归public void preOrder2(){StackNode stack new Stack();Node p root;stack.push(p);while (!stack.empty()){p stack.pop();//输出当前节点System.out.println(p);//右节点不为空入栈if (p.right ! null){stack.push(p.right);}if (p.left ! null){stack.push(p.left);}}}
3.中序遍历。 非递归中序遍历的思路如下 1.先将根节点入栈 2.将当前节点的所有左孩子入栈直到左孩子为空 3.访问栈顶元素如果栈顶元素存在右孩子则继续第2步 4.重复第2、3步直到栈为空并且所有的节点都被访问 //中序遍历非递归public void infixOrder2(){StackNode stack new Stack();Node p root;while (p ! null || !stack.empty()){//根节点和当前节点的所有左子节点入栈while (p ! null){stack.push(p);p p.left;}//访问栈顶p stack.pop();//输出System.out.println(p);if (p.right ! null){p p.right;}else {p null;}}}4.后序遍历。 后续遍历的非递归实现思路 1.根节点入栈 2.将根节点的左子树入栈直到最左没有左孩子为止 3.得到栈顶元素的值先不访问判断栈顶元素是否存在右孩子如果存在并且没有被访问则将右孩子入栈否则就访问栈顶元素 //后序遍历非递归public void postOrder2(){StackNode stack new Stack();Node p root;Node pre null;//上一次访问的节点while (p!null || !stack.empty()){//根节点和所以左孩子入栈while (p ! null){stack.push(p);p p.left;}//访问栈顶元素但不出栈p stack.peek();if (p.right null || p.right pre){p stack.pop();System.out.println(p);pre p;p null;}else {p p.right;}}}