二叉树的前序遍历(递归和非递归)

Bertha 。 2022-06-06 01:14 263阅读 0赞

上一篇是后续遍历,这一篇记录一下前序遍历,递归代码如下:

  1. ArrayList<Integer> list = new ArrayList<>();
  2. public ArrayList<Integer> preorderTraversal(TreeNode root) {
  3. if(root == null)
  4. return list;
  5. pre(root);
  6. return list;
  7. }
  8. private void pre(TreeNode root){
  9. if(root == null)
  10. return;
  11. list.add(root.val);
  12. pre(root.left);
  13. pre(root.right);
  14. }

非递归的情况是用一个栈记录当前访问的节点的左右节点,右节点先入栈,左节点后入栈,这样出栈的时候顺序才是正确的。
非递归代码:

  1. ArrayList<Integer> list = new ArrayList<>();
  2. public ArrayList<Integer> preorderTraversal(TreeNode root) {
  3. if(root == null)
  4. return list;
  5. Stack<TreeNode> s = new Stack<>();
  6. s.push(root);
  7. while(!s.isEmpty()){
  8. TreeNode temp = s.pop();
  9. list.add(temp.val);
  10. if(temp.right != null){
  11. s.push(temp.right);
  12. }
  13. if(temp.left != null){
  14. s.push(temp.left);
  15. }
  16. }
  17. return list;
  18. }

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读