题目描述:
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]
思路:1.递归实现,按照前序遍历的定义(根左右),依次递归遍历即可,没有太大难度。
2.非递归实现,任何递归都可以通过栈来实现非递归,前序遍历只需要将结点边输出边压入栈即可
代码实现:
1.递归实现:
template<typename T>
void PreOder(TreeNode<T> *root) {//根左右的顺序
TreeNode<T> *temp = root;
if (!temp) return;
cout << temp->data << " ";
PreOder(temp->left);
PreOder(temp->right);
}
2.非递归实现
template<typename T>
void PreOderNoRe() {
TreeNode<T> *temp = root;
stack<TreeNode<T> *> s;
if (!temp) return;
while (temp) {
s.push(temp);
cout << temp->data << " ";
temp = temp->left;
}
while (!s.empty()) {
temp = s.top();
temp = temp->right;
s.pop(); //不访问根节点直接去右边结点(因为先序已经访问过)
while (temp != NULL) {
s.push(temp);
cout << temp->data << " ";
temp = temp->left;
}
}
cout << endl;
}