首页 > 其他分享 >二叉树的操作

二叉树的操作

时间:2023-05-06 11:44:55浏览次数:47  
标签:结点 return BiTree 二叉树 操作 include root

二叉树的操作

二叉树的复制

如果是空树,递归结束

否则, 申请新结点的空间,复制根结点

  1. 递归复制左子树
  2. 递归复制右子树

image-20230427170522712

代码实现

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>

using namespace std;

typedef struct BiNode {
	char data;
	struct BiNode* lchild, *rchild;

} BiNode, *BiTree;
void CreateBitree(BiTree &T) {
	char ch;
	cin >> ch;
	if (ch != ',') {
		T = new BiNode; //创建一个新结点
		T->data = ch;
		CreateBitree(T->lchild);
		CreateBitree(T->rchild);
	} else {
		T = NULL;
		return;
	}
}
/*
  二叉树复制函数
  需要两个二叉树的根结点
 */
void copyBiTree(BiTree T, BiTree &NewT) {
	if (T == NULL) { //如果旧树的地址只为空
		NewT = NULL; //那么新树的地址值也为空
	} else {
		NewT = new BiNode; //创建一个新结点
		NewT->data = T->data; //将旧树的值域赋值给新树
		copyBiTree(T->lchild, NewT->lchild); //递归复制左子树
		copyBiTree(T->rchild, NewT->rchild); //递归复制右子树
	}

}
void DLR(BiTree T) {
	if (T != NULL) {
		cout << T->data;
		DLR(T->lchild);
		DLR(T->rchild);
	} else {
		return;
	}


}


int main () {
	BiTree root = NULL;
	CreateBitree(root);
	DLR(root);
	cout << '\n';

	BiTree Newroot = NULL;
	copyBiTree(root, Newroot);

	DLR(Newroot);


	return 0;
}

计算二叉树的深度

如果是空树,则深度为0;

否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1

image-20230427171020141

代码示例

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>

using namespace std;

typedef struct BiNode {
	char data;
	struct BiNode* lchild, *rchild;

} BiNode, *BiTree;
void CreateBitree(BiTree &T) {
	char ch;
	cin >> ch;
	if (ch != ',') {
		T = new BiNode; //创建一个新结点
		T->data = ch;
		CreateBitree(T->lchild);
		CreateBitree(T->rchild);
	} else {
		T = NULL;
		return;
	}
}
/*
  二叉树深度计算函数
  返回值为二叉树的深度
 */
int Depth(BiTree T) {
	int m = 0, n = 0; //m用来记录左子树的深度,n用来记录右子树的深度
	if (T == NULL) {
		return 0;//空树的返回值为0
	} else {
		m = Depth(T->lchild);//递归计算左子树
		n = Depth(T->rchild);//递归计算右子树
		if (m > n) {
			return m + 1;//取m,n的较大值加1
			//然后返回
		} else {
			return n + 1;
		}

	}



}
void DLR(BiTree T) {
	if (T != NULL) {
		cout << T->data;
		DLR(T->lchild);
		DLR(T->rchild);
	} else {
		return;
	}


}


int main () {
	BiTree root = NULL;
	CreateBitree(root);
	DLR(root);
	cout << '\n';
	cout << Depth(root) << '\n';

	return 0;
}

题目链接

104. 二叉树的最大深度

AC代码

/**
 * 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:
    int maxDepth(TreeNode* root) {
        int m=0,n=0;
        if(root==NULL)
        {
            return 0;
        }
        else
        {
            m=maxDepth(root->left);
            n=maxDepth(root->right);
            if(m>n)
            {
                return m+1;
            }
            else
            {
                return n+1;
            }
        }
    }
};

计算二叉树的结点总数

如果是空树,则结点的个数为0;

否则,结点个数为:左子树的结点个数+右子树的结点个数再+1

image-20230427171617308

代码实现


计算二叉树的叶子结点数

如果是空树,则叶子结点个数为0;

否则,为左子树的叶子结点个数+右子树的叶子结点个数.

image-20230427172531501

标签:结点,return,BiTree,二叉树,操作,include,root
From: https://www.cnblogs.com/harper886/p/17376769.html

相关文章

  • 先序 中序建立二叉树!!!
    真不错终于写出来了#include<iostream>#include<map>usingnamespacestd;constintN=20010;intpreorder[N],inorder[N],w[N],n,ans[N];map<int,int>ha_sh;structnode{intnum;node*left;node*right;node(intx){num=x,left=nullptr,right=n......
  • Pytorch数据操作
    1.Pytorch中tensor的生成与访问可以使用arange()创建一个张量:如,torch.arange(12)创建0开始的前12个整数: 除非特殊指定,否则新的张量将存放在内存中,并采用CPU计算。 可以使用reshape()来改变张量的形状: 注意,reshape()的发起者是一个张量,比如这里的x.reshape(),x是一个张量......
  • SSH客户端常用工具SecureCRT操作
    1.1SecureCRT工具介绍SecureCRT是一款支持SSH(SSH1和SSH2)协议的终端仿真软件,常被用来运行于Windows下远程登录UNIX或Linux服务器。SecureCRT软件功能强大,不仅仅支持SSH协议,同时还支持Telnet、RLogin、Serial和TAPI等协议,它有非常多的功能,这里就不一一介绍了,常用功能可见下文介绍......
  • 【大数据】Hive DDL 操作与视图讲解
    目录一、概述1)表和视图关系2)表与视图的区别二、环境准备三、Hive数据类型四、DDL操作1)表的基本语法2)列分隔符和行分隔符3)添加表数据方式1、INSERT方式2、LOADDATA方式3、外部表方式4)DDL常见操作1、创建表2、修改表3、删除表4、创建分区表5、创建外部表五、视图操作1)创建视图2......
  • 1.操作系统概述【操作系统:设计与实现】
    课程官网:https://jyywiki.cn/OS/2023/几个python的库:z3能求解方程组的python库sympy计算符号计算的库numpy数组、矩阵计算相关的学习的时候存在的一定的割裂性,因为不同学科之间存在概念的独立性,学科之间的互通也被打破了。主要的点是A学科用到了B学科的知识点,但A学科并......
  • 初识操作符
    操作符:算数操作符:+-*/%  c语言中除法是等到的结果是“商”,从根上讲除号两端都是整形,得出来的结果都是整数除号两端其中一个是小数,就是执行小数除法所以在写代码中想要执行小数除法必须两端需要有一个数是小数,得出来的数才是小数  在c语言中%是取模(余),所以这里......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......
  • gitlab--python 操作 gitlab
    安装我们可以使用python-gitlab库来操作gitlabpipinstallpython-gitlabgitlabissue查询的api:https://docs.gitlab.com/ee/api/issues.html#list-issuesgitlabissue查询的api:https://docs.gitlab.com/ee/api/issues.html#list-issues创建令牌我们需要令牌进行访问......
  • rock和yubuntu安装后需要做的初始化操作
    Rock和Ubuntu安装后需要做的初始化操作一.CentOS安装后必需所做的初始化操作#关闭SELinuxsed-i'/^SELINUX=/cSELINUX=disabled'/etc/selinux/config#关闭防火墙systemctldisable--nowfirewalld#支持光盘,/misc/cd对应就是光盘内容yum-yinstallautofssystemctlenable......
  • DOM操作----总结
     查找方式一:varobj=document.getElementById(id);varobj=document.getElementById('d1');obj.innerHTML='hellokitty';---innerHTML属性:可以读或者写一个节点的html内容。varobj2=document.getElementById('username');obj2.value='abc�......