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<<T->val;
NLR(T->left);
NLR(T->right);
}
return;
}

PS:

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

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

b.DFS/非递归先序

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

c.BFS

//BFS
void BFS(TreeNode* root){
queue<TreeNode *> nodeQueue; //queue
nodeQueue.push(root);
TreeNode *node;
while(!nodeQueue.empty()){
node = nodeQueue.front();
cout<<node->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=;
if(root){
queue<TreeNode*> mq;
mq.push(root);
TreeNode* node;
while(!mq.empty()){
res++; for(int i=,n=mq.size();i<n;i++){
node=mq.front();
mq.pop();
if(node->left!=NULL)
mq.push(node->left);
if(node->right!=NULL)
mq.push(node->right);
} }
}
return res;
}

最新文章

  1. (转)__cdecl __fastcall与 __stdcall
  2. Html5 Egret游戏开发 成语大挑战(一)开篇
  3. javascript 数组实例
  4. 堆表和%%lockres%%函数
  5. 不重启mysql情况修改参数变量
  6. 28个Unix/Linux的命令行神器
  7. DESTOON伪静态的设置/news/1.html格式
  8. Centos 6.8下安装LBP2900打印机驱动
  9. C#开发中使用配置文件
  10. Java并发之CyclicBarrier、CountDownLatch、Phaser
  11. python来写打飞机
  12. 2、jQuery的一些静态方法
  13. How To Automate Disconnection of Idle Sessions
  14. Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet - 我爱机器学习
  15. hdu 1258
  16. 从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理
  17. halcon之扫描文档祛底色
  18. VS2010 C++环境下DLL和LIB文件的生成与调试 备忘
  19. 模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
  20. IIS7 使用server farms 进行负载均衡

热门文章

  1. Matcher类详解
  2. 爬虫学习笔记(三)requests模块使用
  3. 串口调试利器--Minicom配置及使用详解.md
  4. 一款不错的编程字体Source Code Pro
  5. dogpile搜索引擎
  6. ajax跨域解决办法
  7. 利用mvn/maven如何检查依赖冲突,并解决依赖冲突
  8. ylb:sql语句重命名表名和列名
  9. mongodb文档的CRUD
  10. VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决的方法