代码随想录算法训练营第14天 | 二叉树的遍历

 二叉树的递归遍历

   二叉树的前中后序遍历,是对中间节点而言的。

   public static void pretraversal(TreeNode tree) {
		if(tree==null) return;
		System.out.print(tree.val+",");
		pretraversal(tree.left);
		pretraversal(tree.right);
	}
    public static void intraversal(TreeNode tree) {
    	if(tree==null) return;
    	intraversal(tree.left);
		System.out.print(tree.val+",");
		intraversal(tree.right);
	}
    public static void posttraversal(TreeNode tree) {
    	if(tree==null) return;
    	posttraversal(tree.left);
    	posttraversal(tree.right);
		System.out.print(tree.val+",");
    }

二叉树的迭代遍历

前序遍历:使用栈存储二叉树节点,按中间->右子树->左子树的顺序存储,出来的顺序就是中间->左子树->右子树,即前序遍历的顺序。

中序遍历:利用treenode节点访问节点,栈记录访问过的节点并处理节点。

后序遍历:使用栈存储二叉树节点,按中间->左子树->右子树的顺序存储,出来的顺序就是中间->右子树->左子树,反转一下就是左子树->右子树->中间,即后序遍历的顺序。

public static void pretraversal2(TreeNode tree) {
		if(tree==null) return;
		Stack<TreeNode> stack=new Stack<>();
		stack.add(tree);
		while(!stack.isEmpty()) {
			TreeNode cur=stack.pop();
			System.out.print(cur.val+",");
			if(cur.right!=null) stack.add(cur.right);
			if(cur.left!=null) stack.add(cur.left);
		}
	}
    public static void intraversal2(TreeNode tree) {
    	 TreeNode cur=tree;
    	 Stack<TreeNode> stack=new Stack<>();
    	 while(!stack.isEmpty()||cur!=null) {
    		 if(cur!=null) {
    			 stack.add(cur);
    			 cur=cur.left;
    		 }else {
    			 cur=stack.pop();
    			 System.out.print(cur.val+",");
    			 cur=cur.right;
    		 }
    	 }
    }
    public static void posttraversal2(TreeNode tree) {
    	if(tree==null) return;
    	ArrayList<Integer>list=new ArrayList<>();
    	Stack<TreeNode> stack=new Stack<>();
    	stack.add(tree);
    	while(!stack.isEmpty()) {
    		TreeNode cur=stack.pop();
    		list.add(cur.val);
    		if(cur.left!=null) stack.push(cur.left);
    		if(cur.right!=null) stack.push(cur.right);
    	}
    	for(int i=list.size()-1;i>=0;i--) {
    		System.out.print(list.get(i)+",");
    	}
    	System.out.println();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值