力扣刷题||二叉树

二叉树:满二叉树和完全二叉树

满二叉树:每个节点度为0或2,且度为0的位于同一层。具有2k-1个节点的二叉树

完全二叉树:除了最底层节点没填满之外,其余每层节点数都达到最大值,并且是从左往右达到排满

二叉搜索树,是一个有序树

平衡二叉搜索树:AVL,左右孩子高度差不超过1,两个子树都是一颗平衡二叉树

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树

二叉树存储方式:链式存储、顺序存储

链式存储

父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

遍历:前中后序遍历,层序遍历,

深度优先遍历(前序,中序,后序)

广度优先遍历(层次遍历)

递归遍历:一段程序直接或间接调用自身的一种方法,通过这种形式进行一些固定步骤的许多操作,把一个复杂并且庞大的问题简化,通过专注解决它分化出来的小问题,从而解决大问题。

递归条件三要素:1、确定递归函数的参数和返回值
                           2、确定终止条件

                           3、确定单层递归的逻辑

 二叉树递归前序遍历:

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>result;
        traversal(root, result);
        return result;
    }
    void traversal(TreeNode* root, vector<int>& result)
    {
        if (root == NULL)return;
        result.push_back(root->val);
        traversal(root->left,result);
        traversal(root->right,result);
    }
};

二叉树递归中序遍历:

class Solution {
public:
	vector<int> postorderTraversal(TreeNode* root) {
		vector<int>result;
		Traversal(root, result);
		return result;
	}
	void Traversal(TreeNode* root, vector<int>& result) {
		if (root == NULL)return;
		Traversal(root->left, result);
		result.push_back(root->val);
		Traversal(root->right, result);
	}
};

二叉树后序遍历:

class Solution {
public:
	vector<int> postorderTraversal(TreeNode* root) {
		vector<int>result;
		Traversal(root, result);
		return result;
	}
	void Traversal(TreeNode* root, vector<int>& result) {
		if (root == NULL)return;
		Traversal(root->left, result);
		Traversal(root->right, result);
		result.push_back(root->val);
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值