二叉树前中后序遍历
来源:力扣(LeetCode)
前序遍历链接:https:leetcodecn。comproblemsbinarytreepreordertraversal
中序遍历链接:https:leetcodecn。comproblemsbinarytreeinordertraversal
后序遍历链接:https:leetcodecn。comproblemsbinarytreepostordertraversal题目描述
二叉树的前序遍历节点访问顺序:根节点、左节点、右节点
二叉树的中序遍历节点访问顺序:左节点、根节点、右节点
二叉树的后序遍历节点访问顺序:左节点、右节点、根节点题目分析
二叉树前中后序遍历主要提供了两种方法:迭代递归前序遍历代码实现publicclassPreOrder{publicstaticvoidmain(String〔〕args){PreOrderpreOrdernewPreOrder();TreeNoderootnewTreeNode(1,null,newTreeNode(2,newTreeNode(3),null));TreeNoderootnull;preOrder。preorderTraversal(root);preOrder。preorder2(root);}迭代算法paramrootreturnpublicListIntegerpreorder2(TreeNoderoot){ListIntegerlistnewArrayListInteger();if(rootnull){returnlist;}LinkedListTreeNodestacknewLinkedList();stack。add(root);while(!stack。isEmpty()){TreeNodetreeNodestack。getLast();list。add(treeNode。val);stack。removeLast();if(treeNode。right!null){stack。add(treeNode。right);}if(treeNode。left!null){stack。add(treeNode。left);}}System。out。println(list);returnlist;}递归paramrootreturnpublicListIntegerpreorderTraversal(TreeNoderoot){ListIntegerlistnewArrayListInteger();order(root,list);System。out。println(list);returnlist;}privatevoidorder(TreeNoderoot,ListIntegerlist){if(rootnull){return;}list。add(root。val);if(root。left!null){order(root。left,list);}if(root。right!null){order(root。right,list);}}}中序遍历代码实现publicclassMiddleOrder{publicstaticvoidmain(String〔〕args){MiddleOrderpreOrdernewMiddleOrder();TreeNoderootnewTreeNode(1,null,newTreeNode(2,newTreeNode(3),null));TreeNoderootnull;preOrder。preorderTraversal(root);preOrder。preorder2(root);}迭代算法paramrootreturnpublicListIntegerpreorder2(TreeNoderoot){ListIntegerlistnewArrayListInteger();if(rootnull){returnlist;}LinkedListTreeNodestacknewLinkedList();while(root!null!stack。isEmpty()){while(root!null){stack。addLast(root);rootroot。left;}rootstack。removeLast();list。add(root。val);rootroot。right;}System。out。println(list);returnlist;}递归paramrootreturnpublicListIntegerpreorderTraversal(TreeNoderoot){ListIntegerlistnewArrayListInteger();order(root,list);System。out。println(list);returnlist;}privatevoidorder(TreeNoderoot,ListIntegerlist){if(rootnull){return;}if(root。left!null){order(root。left,list);}list。add(root。val);if(root。right!null){order(root。right,list);}}}后序遍历代码实现publicclassAfterOrder{publicstaticvoidmain(String〔〕args){AfterOrderpreOrdernewAfterOrder();TreeNoderootnewTreeNode(1,null,newTreeNode(2,newTreeNode(3),null));TreeNoderootnull;preOrder。preorderTraversal(root);preOrder。preorder2(root);}迭代算法paramrootreturnpublicListIntegerpreorder2(TreeNoderoot){ListIntegerlistnewArrayListInteger();if(rootnull){returnlist;}LinkedListTreeNodestacknewLinkedList();TreeNodeprevnull;while(root!null!stack。isEmpty()){while(root!null){stack。addLast(root);rootroot。left;}rootstack。removeLast();if(root。rightnullroot。rightprev){根节点list。add(root。val);prevroot;rootnull;}else{stack。addLast(root);rootroot。right;}}System。out。println(list);returnlist;}递归paramrootreturnpublicListIntegerpreorderTraversal(TreeNoderoot){ListIntegerlistnewArrayListInteger();order(root,list);System。out。println(list);returnlist;}privatevoidorder(TreeNoderoot,ListIntegerlist){if(rootnull){return;}if(root。left!null){order(root。left,list);}if(root。right!null){order(root。right,list);}list。add(root。val);}}二叉树前中后序遍历,两种方法的复杂度时间复杂度:O(n)空间复杂度:O(n)
好了,今天就到这里,感谢各位看官到这里,不如点个关注吧!