LeetCode104—二叉树的最大深度

方法一:递归法求解二叉树深度,递归公式为h(root) = max(h(root->left), h(root->righr)) + 1,递归终止条件为树为空数即root = nullptr。

时间复杂度:二叉树中每个节点都要对其求二叉树最大深度,所以求二叉树最大深度函数执行次数为n,故时间复杂度为O(n)。

空间复杂度:在同一时刻只有一个函数在运行,函数执行过程中只需要几个临时变量,所以空间复杂度为O(1)。

1 int maxDepth(TreeNode* root) {
2         if (root == nullptr)    return 0;    //递归终止条件,树为空树
3         
4         int leftChildTreeHeight = maxDepth(root->left);    //左子树高度
5         int rightChildTreeHeight = maxDepth(root->right);    //右子树高度
6         int height = ((leftChildTreeHeight > rightChildTreeHeight) ? leftChildTreeHeight : rightChildTreeHeight) + 1;    //树的高度等于左右子树高度较大值加1
7         
8         return height;
9     }

 

方法二:非递归实现,与层序遍历二叉树的思想类似,将根节点入队,然后循环判断队列是否为空,不为空队头元素出队,然后将队头元素的左右孩子结点依次入栈。在这个过程中维护两个量分别是:当前层在队列中的元素个数、下一层在队列中的元素个数,再循环中如果当前层在队列中的元素个数为0,那么深度加1。

时间复杂度:二叉树中每个节点都要出栈,所以循环执行次数为n,故时间复杂度为O(n)。

空间复杂度:函数运行过程总只用到一些临时变量,空间复杂度为O(1)。

 1 int maxDepth(TreeNode* root) {
 2         if (root == nullptr)    return 0;    //二叉树为空树
 3 
 4         std::queue<TreeNode*> nodeQueue;    //队列用于存放节点指针
 5         TreeNode* pTempNodePtr = nullptr;
 6         int currentTierNodeNum = 0;    //当前层节点个数
 7         int nextTierNodeNum = 0;    //下一层节点个数
 8         int depth = 0;    //树的深度
 9 
10         nodeQueue.push(root);    //将根节点入栈
11         ++currentTierNodeNum;
12         while (!nodeQueue.empty()) {
13             pTempNodePtr = nodeQueue.front();    //获取队头元素
14             nodeQueue.pop();    //队头元素出队
15             --currentTierNodeNum;
16             if (pTempNodePtr->left) {
17                 nodeQueue.push(pTempNodePtr->left);    //左孩子不为空入队
18                 ++nextTierNodeNum;
19             }
20             if (pTempNodePtr->right) {
21                 nodeQueue.push(pTempNodePtr->right);    //右孩子不为空入队
22                 ++nextTierNodeNum;
23             }
24             if (!currentTierNodeNum) {    //当前层元素完全出队
25                 currentTierNodeNum = nextTierNodeNum;    //更新当前层元素个数
26                 nextTierNodeNum = 0;
27                 ++depth;
28             }
29         }
30 
31         return depth;
32     }

 

posted @ 2019-05-10 21:28  zpchya  阅读(244)  评论(0编辑  收藏  举报