欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

二叉树(LeetCode) C++相关知识代码 系列1

程序员文章站 2022-05-24 21:24:22
0、二叉树最大深度 原题目: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 ......

0、二叉树最大深度

     原题目: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.

     方法:求最大深度的时候,只需要比较左右子树的深度,取较大者+1就行了

    C++代码:

class Solution

{
public:

    int minDepth(TreeNode *root){

        if(root==Null) return 0;
        int l=minDepth(root->left);
        int r=minDepth(root->right);
        if(l==0||r==0)
            return 1+l+r;
        return 1+min(l,r);
    } 
    
};

1、二叉树最小深度

     原题目: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,单子树时(即左右子树有一颗为空时)为深度较大者+1

    C++代码:

class Solution{

public:
    int maxDepth(TreeNode *root){

        if (root==NULL)
        {
            return 0;
        }
        int l=maxDepth(root->left);
        int r=maxDepth(root->right);
        return 1+max(l,r);

    }

};

2、Given a binary tree, return the postorder traversal of its nodes' values.

       For example:
  Given binary tree{1,#,2,3},

   1
    \
     2
    /
   3

 

  return[3,2,1].

  Note: Recursive solution is trivial, could you do it iteratively?

   方法:后序遍历,使用vector栈来做,先将父节点入栈,再将右孩子入栈,左孩子入栈。那么返回时就能可以倒序输出后序遍历值。

class Solution{
    public:
        void postOrder(TreeNode *root,vector<int>&vec){
            if (root!=NULL)
            {
                postOrder(root->left,vec);
                postOrder(root->right,vec);
                vec.push_back(root->val);
            }
        }
        vector<int>postorderTraversal(TreeNode *root){
            vector<int> vec;
            postOrder(root,vec);
            return vec;
        }

};