求二叉樹的深度遞迴與非遞迴版
阿新 • • 發佈:2019-01-30
當只有一個節點時,二叉樹的深度為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; } };