2021.4.13-2021.4.18
涉及题目为 二叉树基础部分
第一周刷题结束后 进行一个简单总结
其中代码详细注释见每一天的刷题笔记 本总结部分只简单复现一遍代码!
题目参考开课吧某算法课程胡船长给出的内容~
题号 | 题名 |
---|---|
LC144 | 二叉树的前序遍历 |
LC589 | N叉树的前序遍历 |
LC226 | 翻转二叉树 |
剑指offer32 I | 从上到下打印二叉树 I |
剑指offer32 II == LC102 | 从上到下打印二叉树 II == 二叉树的层序遍历I |
LC107 | 二叉树的层序遍历II |
LC103 | 二叉树的锯齿形层序遍历 |
文章目录
LC144 二叉树的前序遍历
1.题目概述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
2.代码逻辑
【1】定义preorder函数 用于进行递归 接下来进行preorder函数的完成
【2】设置退出条件
【3】将“当前”节点插入结果数组的结尾
【4】遍历当前节点的左子树 右子树
【5】主函数中先初始化数组 然后调用preorder函数 最后返回结果
3.C++代码
class Solution {
public:
void preorder(TreeNode *root,vector<int> &res) {
if (root == NULL) return;
res.emplace_back(root->val);
preorder(root->left, res);
preorder(root->right, res);
}
vector<int>preorderTraversal(TreeNode *root){
vector<int> res;
preorder(root, res);
return res;
}
};
4.python代码
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
def preorder(root: TreeNode):
if not root:
return
res.append(root.val)
preorder(root.left)
preorder(root.right)
res = list()
preorder(root)
return res
LC589 N叉树的前序遍历
1.题目概述
2.代码逻辑
整体跟二叉树的前序遍历差不多 区别在于 不能递归左子树+右子树 而是迭代容器中所有子节点
容器就是介个~
1.Npreorder函数
【1】退出条件
【2】插入尾部
【3】迭代所有元素并对每个元素进行递归遍历
2.调用
3.C++代码
class Solution {
public:
void Npreorder(Node *root, vector<int> &res){
if(root == NULL) return;
res.push_back(root->val);
for(auto x: root->children){
//迭代容器中所有的元素 每个元素的临时名字为x
//一直迭代到root没有子节点为止
Npreorder(x,res);//递归遍历
}
}
vector<int> preorder(Node* root) {
vector<int> res;
Npreorder(root, res);
return res;
}
};
4.python代码
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
def Npreorder(root):
if root:
res.append(root.val)
for node in root