Leetcode94: 二叉树的中序遍历

128 篇文章 1 订阅

给定一个二叉树,返回它的中序 遍历。

示例:
输入: [1,null,2,3]
1
\
2
/
3

输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

解法1 递归法

	//解法1 递归法
	public List<Integer> inorderTraversal(TreeNode root) {
		List<Integer> resultList = new ArrayList<>();
		inorderTraversal(root,resultList);

		return resultList;
	}

	private void inorderTraversal(TreeNode root, List<Integer> resultList) {
		if (root==null)
			return;

		inorderTraversal(root.left,resultList);
		resultList.add(root.val);
		inorderTraversal(root.right,resultList);
	}

解法2 非递归法

	//解法2 非递归法
	public List<Integer> inorderTraversal2(TreeNode root) {

		Stack<State> stack = new Stack<>();
		stack.push(new State("go", root));
		List<Integer> resultList = new ArrayList<>();

		while (!stack.empty()) {
			State state = stack.pop();
			if (state.action.equals("go") && state.target!=null) {
				stack.push(new State("go", state.target.right));
				stack.push(new State("add", state.target));
				stack.push(new State("go", state.target.left));
			} else if (state.action.equals("add") && state.target != null) {
				resultList.add(state.target.val);
			}
		}

		return resultList;

	}

	private class State{
		String action;
		TreeNode target;

		public State(String action, TreeNode target) {
			this.action = action;
			this.target = target;
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值