前序遍历
1、先访问结点元素
2、递归遍历左子树
3、递归遍历右子树
void dlr_tree(TreeNode* tree)
{
if(NULL == tree)
{
return;
}
printf("%c",tree->data);
dlr_tree(tree->left);
dlr_tree(tree->right);
}
中序遍历
1、递归遍历左子树
2、访问结点元素
3、递归遍历右子树
void ldr_tree(TreeNode* tree)
{
if(NULL == tree)
{
return;
}
ldr_tree(tree->left);
printf("%c",tree->data);
ldr_tree(tree->right);
}
后序遍历
1、递归遍历左子树
2、递归遍历右子树
3、访问结点元素
void lrd_tree(TreeNode* tree)
{
if(NULL == tree)
{
return;
}
lrd_tree(tree->left);
lrd_tree(tree->right);
printf("%c",tree->data);
}
层序遍历
初始化一个队列queue<TreeNode*>辅助
先将根root入队
队列不为空时循环:
1、队列出队(保存后可以访问结点元素)
2、如果出队元素的左右子树存在,依次入队
vector<vector<int> > levelOrder(TreeNode* root)
{
vector<vector<int>> ret;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
vector<int> vec;
int size = q.size();
while(size--)
{
TreeNode* tmp = q.front();
vec.push_back(tmp->val);
q.pop();
if(tmp->left) q.push(tmp->left);
if(tmp->right) q.push(tmp->right);
}
if(vec.size()>0)ret.push_back(ans);
}
return ret;
}