已知前序中序求层序 c语言递归,leetcode - 二叉树的遍历(前序、中序、后序、层序)(递归、迭代)...

二叉树前序遍历(递归 + 迭代)

vector res;

vector preorderTraversal(TreeNode* root){

preorder(root);

return res;

}

void preorder(TreeNode* root){

if(!root) return;

res.push_back(root -> val);

preorder(root -> left);

preorder(root -> right);

}

vector preorderTraversal(TreeNode* root){

vector res;

stack stk;

TreeNode* cur = root;

while(cur || !stk.empty()){

while(cur){

stk.push(cur);

res.push_back(cur -> val);

cur = cur -> left;

}

cur = stk.top();

stk.pop();

cur = cur -> right;

}

return res;

}

二叉树中序遍历(递归 + 迭代)

vector res;

vector inorderTraversal(TreeNode* root){

inorder(root);

return res;

}

void inorder(TreeNode* root){

if(!root) return;

inorder(root -> left)

res.push_back(root -> val);

inorder(root -> right);

}

vector inorderTraversal(TreeNode* root){

vector res;

stack stk;

TreeNode* cur = root;

while(cur || !stk.empty()){

while(cur){

stk.push(cur);

cur = cur -> left;

}

cur = stk.top();

stk.pop();

res.push_back(cur -> val);

cur = cur -> right;

}

return res;

}

二叉树后序遍历(递归 + 迭代)

vector res;

vector postorderTraversal(TreeNode* root){

postorder(root);

return res;

}

void postorder(TreeNode* root){

if(!root) return;

preorder(root -> left);

preorder(root -> right);

res.push_back(root -> val);

}

vector postorderTraversal(TreeNode* root){

vector res;

stack stk;

TreeNode* cur = root;

while(cur || !stk.empty()){

while(cur){

stk.push(cur);

res.push_back(cur -> val);

cur = cur -> right;

}

cur = stk.top();

stk.pop();

cur = cur -> left;

}

reverse(res.begin(), res.end());

return res;

}

二叉树层序遍历(BFS + DFS)

vector> levelOrder(TreeNode* root) {

queue q;

vector> res;

q.push(root);

while(!q.empty())

{

int n = q.size();

vector level;

for(int i = 0; i < n; ++ i)

{

TreeNode* cur = q.front();

q.pop();

level.push_back(cur -> val);

if(cur -> left) q.push(cur -> left);

if(cur -> right) q.push(cur -> right);

}

res.push_back(level);

}

return res;

}

vector> res;

vector> levelOrder(TreeNode* root) {

levelorder(root, 0);

return res;

}

void levelorder(TreeNode* root, int level){

if(!root) return;

if(level == res.size()) res.emplace_back();

res[level].push_back(root -> val);

levelorder(root -> left, level + 1);

levelorder(root -> right, level + 1);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值