博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
programming review (c++): (2)binary tree, BFS, DFS, recursive, non-recursive
阅读量:4961 次
发布时间:2019-06-12

本文共 2056 字,大约阅读时间需要 6 分钟。

1.二叉树定义

// Definition for a binary tree node.   struct TreeNode {       int val;       TreeNode *left;       TreeNode *right;       TreeNode(int x) : val(x), left(NULL), right(NULL) {}  };

 

2.遍历

a.递归先序:

//递归先序: 中左右。PS:中序-左中右,后序-左右中,调换cout的位置即可void NLR(TreeNode* T){    if(T!=NULL){      cout<
val; NLR(T->left); NLR(T->right); } return; }

 PS:

递归变量传递的几种方式:

  • 参数里,比如可以以此标记每个node的深度;
  • return,适合做累计操作,例子:
    int maxDepth(TreeNode *root)    //求最大深度:反过来算+max,符合逻辑{    return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;}
  • 参数里加&,贯穿型变量。

b.DFS/非递归先序

//DFS-非递归先序:中左右void depthFirstSearch(TreeNode* root){    stack
nodeStack; //stack nodeStack.push(root); TreeNode *node; while(!nodeStack.empty()){ node = nodeStack.top(); cout<
val; //action nodeStack.pop(); if(node->right!=null){ nodeStack.push(node->right); } if(node->left!=null){ nodeStack.push(node->left); } }}

 c.BFS

//BFSvoid BFS(TreeNode* root){    queue
nodeQueue; //queue nodeQueue.push(root); TreeNode *node; while(!nodeQueue.empty()){ node = nodeQueue.front(); cout<
val; //action nodeQueue.pop(); if(node->left!=null){ nodeQueue.push(node->left); } if(node->right!=null){ nodeQueue.push(node->right); } }}

变形,按层action:

int maxDepth(TreeNode* root) {        int res=0;        if(root){            queue
mq; mq.push(root); TreeNode* node; while(!mq.empty()){ res++; for(int i=0,n=mq.size();i
left!=NULL) mq.push(node->left); if(node->right!=NULL) mq.push(node->right); } } } return res; }

 

转载于:https://www.cnblogs.com/aezero/p/4861276.html

你可能感兴趣的文章
機械の総合病院 [MISSION LEVEL: C]
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
SQLite移植手记1
查看>>
C# windows程序应用与JavaScript 程序交互实现例子
查看>>
HashMap详解
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
iPhone在日本最牛,在中国输得最慘
查看>>
动态方法决议 和 消息转发
查看>>
js 基础拓展
查看>>
C#生成随机数
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
Java回顾之多线程
查看>>
sqlite
查看>>