首页 > 其他分享 >二叉树的创建,遍历与销毁

二叉树的创建,遍历与销毁

时间:2024-03-22 17:02:18浏览次数:17  
标签:lchild 遍历 TreeNode bt 销毁 二叉树 return rchild root

二叉树的创建,遍历与销毁

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
	char val;//数据域 
	TreeNode* lchild;//左子树
	TreeNode* rchild;//右子树 
};
class BiTree{
	private:
		TreeNode* root;//根节点
	public:
		BiTree(){
			root=create(root);//再写一个创造二叉树的函数 
		}
		~BiTree(){
			release(root);//写一个销毁二叉树的函数 
		}
		TreeNode* getRoot(){
			return root;
		}
		void release(TreeNode* bt){
			if(bt==NULL) return;
			release(bt->lchild);
			release(bt->rchild);
			cout<<"delete"<<" "<<bt->val<<endl;
			delete bt;
		}
		TreeNode* create(TreeNode* bt){
			char ch;
			cin>>ch;
			if(ch=='#') return NULL;
			else{
				//前序遍历构造二叉树 
				bt=new TreeNode;
				bt->val=ch;
				bt->lchild=create(bt->lchild);
				bt->rchild=create(bt->rchild);
			}
		}
		void preOrder(TreeNode* bt){
			if(bt==NULL) return;
			else{
				cout<<bt->val;//中 
				preOrder(bt->lchild);//左 
				preOrder(bt->rchild);//右 
			}
		}
		void inOrder(TreeNode* bt){
			if(bt==NULL) return;
			else{
				inOrder(bt->lchild);//左 
				cout<<bt->val;//中 
				inOrder(bt->rchild);//右 
			}
		}
			void postOrder(TreeNode* bt){
			if(bt==NULL) return;
			else{
				postOrder(bt->lchild);//左 
				postOrder(bt->rchild);//右 
				cout<<bt->val;//中 
			}
		}
		void levelOrder(){
			queue<TreeNode*> q;
			if(root!=NULL) q.push(root);//先入队头结点 
			while(!q.empty()){
				TreeNode* node=q.front();
				q.pop();
				cout<<node->val;
				if(node->lchild) q.push(node->lchild);//左右子结点分别入队 
				if(node->rchild) q.push(node->rchild);
			}
		}
};
int main() {
	BiTree tree;//会调用构造函数,将字符串读入 
	tree.preOrder(tree.getRoot());//前序遍历,递归代码为中左右
	cout<<endl; 
	tree.inOrder(tree.getRoot());//中序遍历,递归代码为左中右
	cout<<endl;
	tree.postOrder(tree.getRoot());//后序遍历,递归代码为左右中 
	cout<<endl;
	tree.levelOrder();//利用队列实现层序遍历
	cout<<endl; 
	return 0;
	//结束,调用析构函数 
}

不足之处欢迎批评与指正!

标签:lchild,遍历,TreeNode,bt,销毁,二叉树,return,rchild,root
From: https://blog.csdn.net/2301_78759802/article/details/136891331

相关文章

  • 代码随想录算法训练营第十七天| 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶
    110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/publicbooleanisBalanced(TreeNoderoot){intbalance=balance(root);returnbalance==-1?false:true;}publicintbalance(TreeNodenode){i......
  • 二叉树详解
    二叉树详解一:什么是树1:概念2:树的特点##3:树的一些重要概念二:二叉树1:二叉树的概念2:二叉树的特点3:特殊的二叉树:三:二叉树的性质四:二叉树的存储一:什么是树1:概念树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因......
  • 二叉树的深度优先遍历(力扣94,144,145)
    文章目录题目前知二叉树的遍历方式有什么?递归和迭代是什么?题解一、思路二、解题方法三、Code总结题目Problem:144.二叉树的前序遍历Problem:94.二叉树的中序遍历Problem:145.二叉树的后序遍历前知二叉树的遍历方式有什么?二叉树主要有两种遍历方式:......
  • 236. 二叉树的最近公共祖先c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*lowestCommonAncestor(structTreeNode*root,structTreeNode*p,structTreeNode*q){......
  • 257. 二叉树的所有路径c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/inttemp[400];voiddf......
  • 【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二
     目录 ​编辑1.二叉树的顺序结构及实现1.1二叉树的顺序结构2堆的概念及结构3堆的实现3.1堆的代码定义3.2堆插入数据3.3打印堆数据3.4堆的数据的删除3.5获取根部数据3.6判断堆是否为空3.7堆的销毁 4.建堆以及堆排序 4.1堆排序---是一种选择排序4.2升......
  • 代码随想录第15天|二叉树的层序遍历
    二叉树的层序遍历102.二叉树的层序遍历-力扣(LeetCode)代码随想录(programmercarl.com)讲透二叉树的层序遍历|广度优先搜索|LeetCode:102.二叉树的层序遍历_哔哩哔哩_bilibili给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)......
  • 代码随想录第14天|二叉树的递归遍历
    二叉树的理论基础代码随想录(programmercarl.com)关于二叉树,你该了解这些!|二叉树理论基础一网打尽,二叉树的种类、二叉树的存储方式、二叉树节点定义、二叉树的遍历顺序_哔哩哔哩_bilibili二叉搜索树:二叉搜索树是一个有序树。左子树不为空,则左子树上所有节点的值均小于根......
  • Windows编程系列:进程遍历的几种方法
    在应用层下,进程遍历有多种方式,这里介绍几种常用的方式:进程快照、ZwQuerySystemInformation/NtQuerySystemInformation、EnumProcesses函数、WMI等。 在C#中Process类提供了一个GetProcesses()函数,这个函数内部就是调用的NtQuerySystemInformation进行获取。 进程快照这种方......
  • Leecode 二叉树的中序遍历
    Day6第三题这是一道让我崩溃的题,因为一个笔误root.right写成了root.left改了好久。classSolution{publicList<Integer>inorderTraversal(TreeNoderoot){List<Integer>listRoot=newArrayList<Integer>();if(root!=null){listRo......