LeetCode--树
Posted zhuifeng-mayi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode--树相关的知识,希望对你有一定的参考价值。
1、给定二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数。
class Solution public: int run(TreeNode *root) if(!root) return 0; queue<TreeNode*> qu; TreeNode *last; TreeNode *now; int level=1; int size; last = now = root; qu.push(root); while(qu.size()) now = qu.front(); qu.pop(); size = qu.size(); if(now->left) qu.push(now->left); if(now->right) qu.push(now->right); if(qu.size()-size ==0) break; if(last == now) level++; if(qu.size()) last = qu.back(); return level; ;
2、给定二叉树,返回其节点值的后序遍历。
例如:
给定二叉树1,#,2,3,
1
\
2
/
3
返回[3,2,1]。
注意:递归解决方案很简单,你可以迭代地做吗?
思路:
前序遍历 根->左->右 变成 根->右->左 结果再reverse一下
/** * 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> res; if(!root) return res; stack<TreeNode *> st; st.push(root); while(st.size()) TreeNode *temp = st.top(); st.pop(); res.push_back(temp->val); if(temp->left) st.push(temp->left); if(temp->right) st.push(temp->right); reverse(res.begin(),res.end()); return res; ;
3、给定二叉树,返回其节点值的前序遍历。
例如:
给定二叉树1,#,2,3,
1
\
2
/
3
返回[1,2,3]。
注意:递归解决方案很简单,你可以迭代地做吗?
思路:
非递归方式求前序遍历
首先找根节点的左孩子,如果有则放入开辟好的栈里,若没有则找他的右孩子,
若此时没有其右孩子,则返回它的父节点,观察其是否有右兄弟,以此类推
/** * 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> preorderTraversal(TreeNode *root) vector<int> res; if(!root) return res; stack<TreeNode*> st; TreeNode *p = root; while(!st.empty() || p!=NULL) if(p!=NULL) //如果有左孩子 res.push_back(p->val); //将值放入到开辟好的容器中 st.push(p); //将其放入栈中 p = p->left; //继续找左孩子 else p = st.top(); //找到当前栈中的最上层的节点 st.pop(); //删除该节点 p = p->right; // 看这个节点是由由右孩子 return res; ;
以上是关于LeetCode--树的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] 树 - 实现前缀树, leetcode 208
LeetCode 96. 不同的二叉搜索树 | Python