144. 二叉树的前序遍历

144. 二叉树的前序遍历

难度:中等
题目描述
144. 二叉树的前序遍历_第1张图片
解题思路

1、递归

二叉树遍历递归写法都差不多,就是访问顺序的区别,前序遍历是:根左右,先访问当前节点然后访问左边和右边的节点。

public List<Integer> preorderTraversal(TreeNode root) {
     
		  List<Integer> re = new LinkedList<Integer>();
		  preorderHelper(root, re);
		  return re;
	    }
	  public void preorderHelper(TreeNode root,List<Integer> re) {
     
		  if(root == null)
			  return;
		  re.add(root.val);
		  preorderHelper(root.left, re);
		  preorderHelper(root.right, re);
	  }

144. 二叉树的前序遍历_第2张图片

2、非递归

非递归实际上就是用自己写的栈来代替系统栈做的工作
写法很多但是为了方便记忆我写的和中序遍历很像的版本

//非递归实现前序遍历
	  public List<Integer> preorderTraversal1(TreeNode root) {
     
		  List<Integer> re = new LinkedList<Integer>();
		  Stack<TreeNode> stack = new Stack<>();
		  TreeNode cur = root;
		  while(cur != null || !stack.isEmpty()) {
     
			  while(cur != null) {
     
				  stack.push(cur);
				  re.add(cur.val);
				  cur = cur.left;
			  }
			  //直到到达最左边的元素,出栈一个
			  cur = stack.pop();
			  cur = cur.right;
		  }
		  return re;
	    }

144. 二叉树的前序遍历_第3张图片

你可能感兴趣的:(力扣刷题笔记)