题目
答
- 树节点的栈;根节点入栈,最后访问跟;往左走,根节点入栈,左子树走到空…
- 栈顶元素的右子树若存在,往右走,根节点入栈;若左右都为空,就可以访问根元素,然后栈顶元素出栈;
- 若左右不为空,重复1,2
- 再取栈顶元素,因为入栈的都是左根节点,看右边有没有…重复2,直至栈为空。
- 出栈代表此根所在的子树已经访问完毕,不需要再入栈;因此需要判断当前栈顶根的右子树是不是上一个栈顶根元素。
Show Me The Code:
- 树节点
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {
}
TreeNode