当只有一个节点时,二叉树的深度为1,这与求二叉树的高度略微有点不同。
好像之前在leetcode上还是什么上写的代码,整理一下
#include<iostream> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: int maxDepth(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function int depth; if(root==NULL)return 0; else{ depth=(maxDepth(root->left)>maxDepth(root->right)? maxDepth(root->left):maxDepth(root->right))+1; return depth; } } }; int main(){ TreeNode n1(5); TreeNode n2(6); TreeNode n3(7); TreeNode n4(8); TreeNode n5(9); TreeNode n6(10); //n1.left=&n2; n1.right=&n3; n2.left=&n4; n4.left=&n5; //n5.right=&n6; Solution s; int dep=s.maxDepth(&n1); cout<<dep<<endl; }
非递归版本,需保存每个节点的深度信息,自顶向下计算。所以定义了数据结构denode一方面保存节点的指针,一方面保存节点的深度值。
用队列来保存
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; struct denode { TreeNode* node; int degree; }; class Solution { public: int maxDepth(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root==NULL)return 0; queue<denode> que; denode dnode; dnode.degree=1; dnode.node=root; que.push(dnode); int degree=1; while(!que.empty()) { denode ptr=que.front(); que.pop(); degree=ptr.degree; if(ptr.node->left!=NULL) { denode p; p.node=ptr.node->left; p.degree=ptr.degree+1; que.push(p); } if(ptr.node->right!=NULL) { denode p; p.node=ptr.node->right; p.degree=ptr.degree+1; que.push(p); } } return degree; } };
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15245.html