1 递归
2 非递归
class Solution
{
public:
//前序遍历
//递归实现
void PreOrder(TreeNode *root) {
if (root == NULL) {
return;
}
cout << root_val;
PreOrder(root->left);
PreOrder(root->right);
}
//非递归实现
void PreOrder2(TreeNode *root) {
if (root == NULL) {
cout << "NULL" << endl;
}
stack<TreeNode *> nstack;
TreeNode *node = root;
while (node != NULL || nstack.empty() != true) {
while (node != NULL) {
cout << node->val;
nstack.push(node);
node = node->left;
}//遍历到左孩子为空
if (nstack.empty() != true) {
node = nstack.top();
nstack.pop();
node =node->right;
}//左孩子为空,弹出,指向右孩子
}
}
//中序遍历
//递归
void InOrder(TreeNode *root) {
if (root == NULL) {
return;
}
InOrder(root->left);
cout << root_val;
InOrder(root->right);
}
//用栈
void InOreder2(TreeNode *root) {
if (root == NULL) {
cout NULL;
}
stack<TreeNOde *> nstack;
TreeNode *node = root;
while (node != NULL || nstack.empty() != true) {
while (node != NULL) {
nstack.push(node);
node = node->left;//装入结点。一直到左孩子为空
}
if (nstack.empty() != true) {
node = nstack.top();
cout << node->val;//打印当前节点
nstack.pop();
node = node->right;//指向右孩子
}
}
}
//后续遍历
//递归
void PostOrder(TreeNode *root) {
if (root == NULL) {
return;
}
PostOrder(root->left);
PostOrder(root->right);
cout << root_val;
}
//用栈
void PostOreder2(TreeNode *root) {
if (root == NULL) {
cout NULL;
}
stack<TreeNOde *> nstack;
TreeNode *node = root;
TreeNode *cur;
TreeNode *pre = NULL;
nstack.push(root);
while (nstack.empty() != true) {
cur = nstack.top();
if ((cur->left == NULL && cue->right == NULL) ||
(pre !=NULL && (pre == cur->left && cur->right == NULL)
|| pre == cur->right) ) {
//当前节点要想被输出,必须
// 1左右节点为空
// 2 左孩子刚被输出,右孩子为空
// 3 右孩子为空
cout << cur->val;
nstack.pop();
pre = cur;
}
else {
if (cur->right != NULL) {
nstack.push(cur->right);
}
if (cur->left != NULL) {
nstack.push(cur->left);
}
}
}
}
};