10、二叉树的深度(JZ55)
描述及示例
思路:递归求子树高度,最后再加1即可
class Solution {
public:
int TreeDepth(TreeNode* pRoot) {
if(pRoot == NULL) return 0;
return max(TreeDepth(pRoot->left),TreeDepth((pRoot->right))) + 1;
}
};
这太简单了大家就别试了,我水个博客(狗头)
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;
}
};
思路清晰了你也快来试一试吧~
按之字形顺序打印二叉树