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

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
扫描二维码关注公众号,回复: 99567 查看本文章

  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;
        }

};

猜你喜欢

转载自www.cnblogs.com/c-huan/p/8981483.html