1.先序遍历一颗二叉树
方法一:
void preTree1(TreeNode* root)
{
if(!root)
return ;
stack<TreeNode*>treestack;
cout<<root->data<<' ';
treestack.push(root);
while(treestack.size())
{
TreeNode* node=treestack.top();
if(node->left)
{
cout<<node->left->data<<' ';
treestack.push(node->left);
node->left=NULL;
}
else
{
treestack.pop();
if(node->right)
{
cout<<node->right->data<<' ';
treestack.push(node->right);
}
}
}
}
方法二:
void preTree2(TreeNode* root)
{
if(!root)
return;
stack<TreeNode*>treestack;
treestack.push(root);
while(treestack.empty()==false)
{
TreeNode* node=treestack.top();
cout<<node->data<<' ';
treestack.pop();
if(node->right)
treestack.push(node->right);
if(node->left)
treestack.push(node->left);
}
}
2.中序遍历二叉树
方法一:
void inTree1(TreeNode* root)
{
if(!root)
return;
stack<TreeNode*>treestack;
treestack.push(root);
while(treestack.size())
{
TreeNode* node=treestack.top();
if(node->left)
{
treestack.push(node->left);
node->left=NULL;
}
else
{
treestack.pop();
cout<<node->data<<' ';
if(node->right)
{
treestack.push(node->right);
}
}
}
}
方法二:
TreeNode* inTree2(TreeNode* node)
{
TreeNode* root=node;
if(!root)
return NULL;
stack<TreeNode*>treestack;
while(treestack.size()||root)
{
while(root)
{
treestack.push(root);
root=root->left;
}
if(treestack.size())
{
root=treestack.top();
treestack.pop();
cout<<root->data<<' ';
root=root->right;
}
}
return node;
}
3.后序遍历二叉树
void lastTree(TreeNode* root)
{
if(!root)
return;
stack<TreeNode*>treestack;
treestack.push(root);
while(treestack.size())
{
TreeNode* node=treestack.top();
if(node->left)
{
treestack.push(node->left);
node->left=NULL;
}
else if(node->right)
{
treestack.push(node->right);
node->right=NULL;
}
else
{
cout<<node->data<<' ';
treestack.pop();
}
}
}
4.层序遍历二叉树
void lay(TreeNode* root)
{
if(!root)
return;
deque<TreeNode*>treedeque;
treedeque.push_back(root);
while(treedeque.size())
{
TreeNode* node=treedeque.front();
treedeque.pop_front();
cout<<node->data<<' ';
if(node->left)
treedeque.push_back(node->left);
if(node->right)
treedeque.push_back(node->right);
}
}