剑指offer(10-11)

10、二叉树的深度(JZ55)
描述及示例
剑指offer(10-11)_第1张图片
在这里插入图片描述
思路:递归求子树高度,最后再加1即可

class Solution {
public:
    int TreeDepth(TreeNode* pRoot) {
        if(pRoot == NULL) return 0;
        return max(TreeDepth(pRoot->left),TreeDepth((pRoot->right))) + 1;
    }
};

这太简单了大家就别试了,我水个博客(狗头)
2、按之字形顺序打印二叉树
描述及示例
剑指offer(10-11)_第2张图片
思路://

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        TreeNode* head = pRoot;
        //定义要返回的二维数组
        vector<vector<int>> res;
        //如果为空则直接返回空的数组
        if(NULL == head) return res;
        //对树进行遍历并使用队列结构存储元素
        queue<TreeNode*> temp;
        //头节点入队列
        temp.push(head);
        TreeNode* p;
        //定义一个标志位来看当前行要不要进行反转
        bool flag = true;
        while(!temp.empty())
        {
            //记录二叉树的某一行
            vector<int> row;
            int n = temp.size();
            //奇数行反转,偶数行不反转
            //从第一行开始,是要反转的
            flag = !flag;
            for(int i = 0;i < n;i++)
            {
                //将队列的第一个元素节点给P,在后边对P的左右孩子进行判断
                p = temp.front();
                temp.pop();
                row.push_back(p->val);
                //如果左右孩子存在则存入左孩子作为下一个层次
                if(p->left)
                    temp.push(p->left);
                if(p->right)
                    temp.push(p->right);
            }
            if(flag)
                //奇数行反转,偶数行不反转
                reverse(row.begin(),row.end());
            res.push_back(row);
        }
        return res;
    }  
};

思路清晰了你也快来试一试吧~
按之字形顺序打印二叉树

你可能感兴趣的:(剑指offer题目,leetcode,算法,c++)