/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> arr;
stack<TreeNode*>tree;
TreeNode *cur=root;
TreeNode *last=NULL;
while(cur || !tree.empty()){
while(cur){
tree.push(cur);
cur=cur->left;
}
TreeNode *top=tree.top();
右为空 或 右树根==last表示有树已经访问过了
if(top->right==NULL || top->right==last){
arr.push_back(tree.top()->val);
last=top;
tree.pop();
}
else
cur=top->right;
}
return arr;
}
};
给定一个二叉树,找出它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数。
思路:
如果root为空,直接返回0。当节点左右子节点都在的时候取最小;当只存在一个子节点时,取最大;
class Solution {
public:
int run(TreeNode *root) {
if(root==NULL){
return 0;
}
else if(root->left!=NULL&&root->right!=NULL){
return 1+min(run(root->left), run(root->right));
}
else{
return 1+max(run(root->left), run(root->right));
}
}
};
迭代方法2:
class Solution {
public:
int run(TreeNode *root) {
if (root == NULL) {
return 0;
}
queue<TreeNode*> queue;
queue.push(root);
int depth = 1;
while (!queue.empty()) {
int num = queue.size();
for (int i = 0; i < num; i++) {
TreeNode *top = queue.front();
queue.pop();
if (top->left == NULL && top->right == NULL) {
return depth;
}
if (top->left != NULL) {
queue.push(top->left);
}
if (top->right != NULL) {
queue.push(top->right);
}
}
depth++;
}
return depth;
}
};