本文共 4797 字,大约阅读时间需要 15 分钟。
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
返回其前序遍历: [1,3,5,6,2,4]。说明: 递归法很简单,你可以使用迭代法完成此题吗?
class Solution {public: vector preorder(Node* root){ if(root != nullptr) { res.push_back(root->val); for(auto n : root->children) preorder(n); } return res; }private: vector res;};
/*// Definition for a Node.class Node {public: int val; vectorchildren; Node() {} Node(int _val, vector _children) { val = _val; children = _children; }};*/class Solution {public: vector preorder(Node* root) { if(root == nullptr) return res; s_node.push(root); while(!s_node.empty()) { Node* temp = s_node.top(); res.push_back(temp->val); s_node.pop(); for(int i = temp->children.size() - 1; i>=0; i--) { s_node.push(temp->children[i]); } } return res; }private: vector res; stack s_node; };
class Solution {public: vector postorder(Node* root) { if(root != nullptr){ for(auto n : root->children) { postorder(n); } res.push_back(root->val); } return res; }private: vector res;};
方法二:迭代 :栈
/*// Definition for a Node.class Node {public: int val; vectorchildren; Node() {} Node(int _val, vector _children) { val = _val; children = _children; }};*/class Solution {public: vector postorder(Node* root) { if(root) { s_node.push(root); while(!s_node.empty()) { Node* temp = s_node.top(); s_node.pop(); res.push_back(temp->val); for(auto x : temp->children) { s_node.push(x); } } int size = res.size(); for(int i=0; i < size/2; i++) { int buf = res[i]; res[i] = res[size - i - 1]; res[size - i - 1] = buf; } } return res; }private: vector res; stack s_node;};
/*// Definition for a Node.class Node {public: int val = NULL; vectorchildren; Node() {} Node(int _val, vector _children) { val = _val; children = _children; }};*/class Solution {public: vector > levelOrder(Node* root) { if(root) { q_node.push(root); while(!q_node.empty()) { int size = q_node.size(); vector r(size); for(int i = 0; i < size; i++) { Node* temp = q_node.front(); q_node.pop(); r[i] = temp->val; for(auto x : temp->children) { q_node.push(x); } } res.push_back(r); } } return res; } private: vector > res; queue q_node;};
对于二叉树来说求一棵树的最大深度!
int maxDepth(ThreeNode* node){ if(node == nullptr) return 0 ; return max(maxDepth(node->left), maxDepth(node->right)) + 1;}
/*// Definition for a Node.class Node {public: int val; vectorchildren; Node() {} Node(int _val, vector _children) { val = _val; children = _children; }};*/class Solution {public: int maxDepth(Node* root) { if(root == nullptr) return 0; int dep = 0; for(auto x : root->children) dep = max(dep, maxDepth(x)); return dep+1; }};
下面的方法可能更能懂,root 不为空 则 dep 至少 为 1,有孩子则深度 加 +1.
class Solution {public: int maxDepth(Node* root) { if(root == nullptr) return 0; int dep = 1; for(auto x : root->children) dep = max(dep, maxDepth(x) + 1); return dep; }};
转载地址:http://nuzjn.baihongyu.com/