• 二叉树层序遍历


     层序遍历:用一个队列保存当前结点的左右孩子以实现层序遍历,因为先访问的结点,其左右孩子结点也要先访问

     1 void LevelOrder(TreeNode* root,vector<int>& res){
     2     if(!root) return;
     3     queue<TreeNode*> q;
     4     TreeNode* node;
     5     q.push(root);
     6     while(!q.empty()){
     7         node=q.front();
     8         q.pop();
     9         res.push_back(node->value);
    10         if(node->left)   q.push(node->left);
    11         if(node->right)  q.push(node->right);  
    12         
    13      }
    14 }

    接下来可以看两个变种:

    Maximum Depth of Binary Tree:

    Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

     1 class Solution {
     2 public:
     3     int maxDepth(TreeNode* root) {
     4         if(root==NULL) return 0;
     5         queue<TreeNode*> q;
     6         TreeNode* node=NULL;
     7         int count=0;
     8         q.push(root);
     9         while(!q.empty())
    10         {
    11             count++;
    12             int len=q.size();
    13             for(int i=0;i<len;i++)
    14             {
    15                 node=q.front();
    16                 q.pop();
    17                 if(node->left) q.push(node->left);
    18                 if(node->right) q.push(node->right);
    19             }                        
    20         }
    21         return count;
    22     }
    23 };

    Minimum Depth of Binary Tree:

    Given a binary tree, find its minimum depth.

    The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int minDepth(TreeNode* root) {
            if(root==NULL) return 0;
            queue<TreeNode*> q;
            TreeNode* node=NULL;
            int count=0;
            q.push(root);
            while(!q.empty())
            {
                count++;
                int len=q.size();
                for(int i=0;i<len;i++)
                {
                    node=q.front();
                    q.pop();
                    if(node->left==NULL&&node->right==NULL) return count;
                    if(node->left) q.push(node->left);
                    if(node->right) q.push(node->right);
                }
            }
           // return count;
        }
    };
  • 相关阅读:
    如何在Ubuntu 18.04上安装Memcached
    ubuntu安装mysql添加密码
    Django学习---快速搭建搜索引擎(haystack + whoosh + jieba)
    django3.x 使用haystack 报错:ImportError: cannot import name 'six' from 'django.utils'
    spring boot2之Jackson和ObjectMapper
    python之装饰器强制函数上的类型检查
    python之*args和**kwargs的区别
    Python之@property
    python基础语法之and,or,not
    小案例
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/7821649.html
Copyright © 2020-2023  润新知