题目描述:
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2]
思路:1.递归:按照中序遍历的定义(左根右进行访问)2.非递归:任何递归都可以通过栈来实现非递归,所以将左边依次压入栈中然后访问最左边的,依次循环即可。
代码实现:
1.递归实现
template<typename T>
void MidOder(TreeNode<T> *root) {//左根右依次访问
TreeNode<T> *temp = root;
if (!temp) return;
MidOder(root->left);
cout << root->data << " ";
MidOder(root->right);
}
2.非递归实现:
template<typename T>
void MidOderNoRe() {
TreeNode<T> *temp = root;
stack<TreeNode<T> *> s;
if (!temp) return;
while (temp||!s.empty()) {
while (temp) {
s.push(temp);
temp = temp->left;
}
temp = s.top(); //与先序相比输出了根节点
cout << temp << " ";
s.pop();
temp = temp->right;
}
cout << endl;
}