1、Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
class Solution { public: int maxDepth(TreeNode *root) { inMax = 0; int depth = 0; if(root){ maxDepth(root,depth); } return inMax; } void maxDepth(TreeNode* root, int depth){ ++depth; if(!root->left && !root->right){ if(depth >inMax){ inMax = depth; } } if(root->left){ maxDepth(root->left,depth); } if(root->right){ maxDepth(root->right,depth); } } int inMax; };
2、Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes‘ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / 9 20 / 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
分析:有栈来保存结点,第一次先放左孩子后放右孩子,第二次先放右孩子再放左孩子。
class Solution { public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int> > result; stack<TreeNode*> stackNode; stack<TreeNode*> newStackNode; vector<int> nodeVec; if(root){ stackNode.push(root); while(!stackNode.empty()){ nodeVec.clear(); while(!stackNode.empty()){ TreeNode* node = stackNode.top(); stackNode.pop(); nodeVec.push_back(node->val); if(node->left){ newStackNode.push(node->left); } if(node->right){ newStackNode.push(node->right); } } result.push_back(nodeVec); nodeVec.clear(); while(!newStackNode.empty()){ TreeNode* node = newStackNode.top(); newStackNode.pop(); nodeVec.push_back(node->val); if(node->right){ stackNode.push(node->right); } if(node->left){ stackNode.push(node->left); } } if(!nodeVec.empty()){ result.push_back(nodeVec); } } } return result; } };
时间: 2024-10-12 12:23:42