二叉树中的常见问题

本文探讨了二叉树在编程中的常见问题,包括遍历、查找、插入和删除等操作,结合C++实现,深入解析数据结构与算法的应用。
摘要由CSDN通过智能技术生成

二叉树中的编程问题

#include<iostream>
#include<queue>
#include<list>
#include<string>
#include<unordered_map>
using namespace std;
struct TreeNode {
   
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode*parent;
	TreeNode() : val(0), left(nullptr), right(nullptr),parent(nullptr) {
   }
	TreeNode(int x) : val(x), left(nullptr), right(nullptr),parent(nullptr) {
   }
	TreeNode(int x, TreeNode *left, TreeNode *right,TreeNode*parent) : val(x), left(left), right(right),parent(parent) {
   }
};
//1.树的四种遍历方式                                //在算法课实现的文件上
//2.判断一颗二叉树是否是搜索树                      LeetCode第98题
//3.判断一颗二叉树是否是完全二叉树					
//4.判断一颗二叉树树是否是满二叉树
//5.判断一棵树二叉树是否是平衡二叉树
//6.找到两个节点的最近公共祖先
//7.在二叉树中找到一个节点的后继节点
//8.二叉树的序列化和反序列化

//1.用递归和非递归方式两种方式实现二叉树的先序遍历、中序遍历、后序遍历
//2.如何完成二叉树的宽度优先遍历以及输出最大宽度
//

//1.先序遍历递归(中序、后序只是返回位置不同)与非递归
TreeNode* preorderTree(TreeNode*root)
{
   
	if (root == NULL)
	{
   
		return NULL;
	}
	return root;
	preorderTree(root->left);
	preorderTree(root->right);
}
//先序遍历(非递归)压栈
TreeNode*preorderTree(TreeNode*root)
{
   
	if (root == NULL)
	{
   
		return NULL;
	}
	stack<TreeNode*> stc;
	stc.push(root);
	while (!stc.empty())
	{
   
		root = stc.top();
		return stc.top();
		stc.pop();
		if (root->left)
		{
   
			stc.push(root->left);

		}
		if (root->right)
		{
   
			stc.push(root->right);
		}
	}
	return NULL;
}
//中序遍历
TreeNode*Inordered(TreeNode*root)
{
   
	if (root == NULL)
	{
   
		return NULL;
	}
	stack<TreeNode*> stc;
	while (!stc.empty() || root 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值