中序遍历:左子树—根结点—右子树 1.判断额外情况,如果树为空,直接返回 2.创建一个栈用来保存结点 3.从上往下遍历最左侧路径中的每个结点,并将其保存到栈中,走到cur==null的位置 4.此时栈顶元素为最左侧路径的最后一个结点,将其加入到list并将栈顶元素移除 5.判断最后一个结点的右子树是否为空,过程和上述...
tree.preOrder(tree.root); System.out.print("\n非递归前序遍历:"); tree.preOrder1(tree.root); System.out.print("\n递归中序遍历 :"); tree.midOrder(tree.root); System.out.print("\n非递归中序遍历 :"); tree.midOrder1(tree.root); System.out.print("\n递归后序遍历 :"); tree.pos...
其实就是根节点被访问的前中后,前序遍历就是根节点在最开始,中序遍历就是根节点在中间,后序遍历就是根节点在最后,当然这个根节点并不一定是二叉树的唯一根节点,而是每个节点只要有子节点,那这个节点其实都可以看作子节点的根节点。
写了一个二叉树的前序遍历版本 publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>list=newArrayList<>();Stack<Pair>st=newStack<>();st.push(newPair(root,false));booleanvisited;while(!st.isEmpty()){Pairpair=st.pop();visited=pair.getValue();root=pair.getKey();if(root==null){...
⭐️1.二叉树的前序遍历(根->左->右) 1.递归解法 //用来放答案的集合,设为全局变量 List<Integer> ret = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) { if(root == null) { return ret; ...
}/*** 前序非递归 *@paramcurrent*/publicvoidpreOrderNonRecursive(BinaryTreeNode current){ Stack<BinaryTreeNode> stack =newStack<BTree.BinaryTreeNode>();while((current!=null)||(stack.isEmpty())){if(current!=null){ System.out.println(current.getInfo()); ...
* 定义栈数据结构(用于非递归遍历) */ struct seqstack { bt data[maxsize]; int top; }; typedef struct seqstack* stack; 递归构建二叉树 全局数组、全局变量构建二叉树 char str[101] = "abc##de#g##f###"; int count = 0; bt createBintree() ...