二叉树的前序、中序、后序、层序遍历(C++)
程序员文章站
2024-03-22 19:04:58
...
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
前序遍历
void PreOrder(TreeNode* currentNode)
{
if(currentNode)
{
cout << currentNode -> val;
PostOrder(currentNode->left);
PostOrder(currentNode->right);
}
}
中序遍历
void InOrder(TreeNode* currentNode)
{
if(currentNode)
{
PostOrder(currentNode->left);
cout << currentNode -> val;
PostOrder(currentNode->right);
}
}
后序遍历
void PostOrder(TreeNode* currentNode)
{
if(currentNode)
{
PostOrder(currentNode->left);
PostOrder(currentNode->right);
cout << currentNode -> val;
}
}
层序遍历
void LevalOrder(TreeNode* root, queue<TreeNode*> q)//层序遍历 显示一个之前先把其左右孩子放到队列里
{
TreeNode* currentNode = root;
cout << currentNode -> val;
while(currentNode)
{
if(currentNode->left){
q.push(currentNode->left); //入队列
}
if(currentNode->right){
q.push(currentNode->right); //入队列
}
if(q.empty()) return;
currentNode=q.front();//将队列头记下,将左右孩子入队列
q.pop();//出队头
}
}