4-1 LC144 二叉树的前序遍历 C++ python力扣刷题笔记

LC144 二叉树的前序遍历在这里插入图片描述

LC144 二叉树的前序遍历

1.读题

给我们二叉树的根节点root
要求返回节点值的前序遍历

提示:

  • 树中节点数目在范围[0,100]内
  • -100 <= Node.val(节点值) <=100

进阶
递归算法实现这个是很简单的
挑战自我 你可以使用迭代算法完成这个算法么?

实例1
在这里插入图片描述
输入:root = [1,null,2,3] #左子树空 右子树为 2,3
输出:[1,2,3]

实例2
输入:root = []
输出:[]

实例3
输入:root = [1]
输出:[1]

实例4
在这里插入图片描述
输入:root = [1,2]
输出:[1,2]

实例5
在这里插入图片描述
输入:root = [1,null,2]
输出:[1,2]

2.解题思路

个人想法:

  • 先使用中序遍历+前序/后序遍历的结果还原二叉树——大错特错!又没让你还原二叉树 让你做的就是个前序遍历!
  • 利用迭代的方法 进行前序遍历——错!这步的逻辑何在…大无语子

官方题解思路:

  • 明确二叉树前序遍历的顺序:按照访问根节点——左子树——右子树的方式遍历这棵树
  • 访问左子树/右子树的时候 按照如上的方式进行遍历 直到遍历完整棵树

整个遍历过程天然具有递归的性质!
方法一——使用递归函数来模拟这一过程

  • 明确递归终止条件——碰到空节点
  • 定义preorder(root)表示当前遍历到root节点的答案 我们将root节点的值加入答案
  • 递归调用preorder(root.left)来遍历root节点的左子树
  • 递归调用preorder(root.rightt)来遍历root节点的右子树 —— 同理

3.C++代码【法一】

// Definition for a binary tree node.
// struct TreeNode {
//    int val;
//    TreeNode *left;
//    TreeNode *right;
//    TreeNode() : val(0), left(nullptr), right(nullptr) {}
//    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
//    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
// };
class Solution {
public:
	void preorder(TreeNode *root,vector<int> &res) {
		if (root == NULL) return; 
		//如果碰到空节点 递归终止 
		
		//递归出口是必要的! 
		
		res.push_back(root->val); //将根节点值放到结果数组中 
		//res.push_back(xxx) 在数组res的末尾插入元素xxx 
		
		preorder(root->left,res); // 递归左子树 
		//递归的作用——把遍历到的那个root->val插入res的末尾 
		
		preorder(root->right,res); // 递归右子树 
		return; 
	}
	vector<int>preorderTraversal(TreeNode *root){
//		主函数 
		vector<int> res; //创建一维数组res 
		
		preorder(root, res);//调用写好的前序遍历函数 
		//两个实参为根节点root 结果数组res从root开始进行遍历 
		
		return res;//返回结果数组 
	}
	
};

这里注释写得还是很详尽哈 ~
在这里插入图片描述

4.python代码 【法一】

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         初始化函数 ~
#         self.val = val
#         self.left = left
#         self.right = right
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

可以看出来 python的递归效率就低得多了!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值