Binary Tree Inorder Traversal 二叉树的中序遍历

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

示例:

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

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

思路

递归的方法简单易懂,这里要求用非递归的方法实现,对于中序遍历(左-中-右)我们需要一个栈,首先压入根节点,然后循环压入左节点,如果左节点不为空就压出栈顶节点并打印,然后压入栈顶元素的右节点。

vector<int> inorderTraversal(TreeNode* root) {
	vector<int> res;
	if (!root) {
		return res;
	}
	TreeNode* tmp = root;
	stack<TreeNode*> stack;
	while (tmp || !stack.empty()) {
		while (tmp != nullptr) {
			stack.push(tmp);
			tmp = tmp->left;
		}
		if (!stack.empty()) {
			tmp = stack.top();
			res.push_back(tmp->val);
			stack.pop();
			tmp=tmp->right;
		}
	}
	return res;
}



猜你喜欢

转载自blog.csdn.net/qq_26410101/article/details/80520518
今日推荐