IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言----二叉树相关 -> 正文阅读

[数据结构与算法]C语言----二叉树相关

1,平衡二叉树

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

/**
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
int depth(struct TreeNode* pRoot)
{
    if(pRoot == NULL)  return 0;
    int left = depth(pRoot->left);
    if(left == -1)  return -1;
    int right = depth(pRoot->right);
    if(right == -1)  return -1;
    if(abs(left-right)>1)  
        return -1;
    else
        return (left>right?left:right)+1;
}
bool IsBalanced_Solution(struct TreeNode* pRoot ) 
{
    // write code here
    return depth(pRoot) == -1?false:true;
}

?2,二叉树的最大深度

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int maxDepth(TreeNode* root)
    {
        // write code here
        if(root == NULL) return 0;
        int left = maxDepth(root->left);
        int right = maxDepth(root->right);
        return (left>right?left:right)+1;
    }
};

3,根据前序和中序重建二叉树

#include<stdio.h>
#include<stdlib.h>
typedef struct BinaryTreeNode{
	int data;
	struct BinaryTreeNode * lchild;
	struct BinaryTreeNode * rchild;
} binarytreenode, *binarytreeroot_ptr;

binarytreeroot_ptr rebulit_binarytree(int *start_preorder, int *end_preorder, int *start_inorder, int * end_inorder);
int Find_location(int n, int *a);
void display_preorder(binarytreeroot_ptr root);
void display_inorder(binarytreeroot_ptr root);
void display_postorder(binarytreeroot_ptr root);
binarytreeroot_ptr construct(int *pre, int *in, int length);
void main(){
	int pre[] = {1,2,4,7,3,5,6,8}, in[] = {4,7,2,1,5,3,8,6}, length;
	length = sizeof(pre)/sizeof(int);
	struct BinaryTreeNode* root;
	root = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
	root = construct(pre, in, length); 
	display_preorder(root);
	printf("\n");
	display_inorder(root);
	printf("\n");
	display_postorder(root);
	
}
binarytreeroot_ptr construct(int *pre, int *in, int length){初始判断
	if(pre == NULL || in == NULL || length <= 0){
		printf("\t输入非法序列\n");
		exit(1);
	}
	return (binarytreeroot_ptr)rebulit_binarytree(pre, pre + length - 1, in, in + length - 1);
}
binarytreeroot_ptr rebulit_binarytree(int *start_preorder, int *end_preorder, int *start_inorder, int * end_inorder){重建二叉树
	
	int root_location;
	binarytreeroot_ptr root;
	root = (binarytreeroot_ptr)malloc(sizeof(binarytreenode));
	root->data = *start_preorder;
	root->lchild = NULL;
	root->rchild = NULL;
	root_location = Find_location(start_preorder[0],start_inorder);
	if(start_preorder == end_preorder && start_inorder == end_inorder){
		if (*start_preorder == *start_inorder){
			return root;//叶子结点(只有自己,所有的序列都是自己) 
		}
	}
	if(root_location > 0) {
		root->lchild = rebulit_binarytree(start_preorder+1, start_preorder + root_location, start_inorder, start_inorder + root_location - 1);
	}
	if((start_inorder + root_location) < end_inorder){
		root->rchild = rebulit_binarytree(start_preorder + root_location + 1, end_preorder, start_inorder + root_location + 1, end_inorder);
	
	}
	return root; //非叶子结点,赋值完左右子树,返回 
} 
int Find_location(int n, int *a){//返回差值
	int count = 0;
	while(*(a + count) != n){
		count ++;
	}
	//
	return count;
}
void display_preorder(binarytreeroot_ptr root){//前序 输出
	if(root == NULL){
		return ;
	}
	printf("\t%d",root->data);
	display_preorder(root->lchild);
	display_preorder(root->rchild);
}
void display_inorder(binarytreeroot_ptr root){//中序 输出
	if(root == NULL){
		return ;
	}
	display_inorder(root->lchild);
	printf("\t%d",root->data);
	display_inorder(root->rchild);
}
void display_postorder(binarytreeroot_ptr root){//后序 输出
	if(root == NULL){
		return ;
	}
	display_postorder(root->lchild);
	display_postorder(root->rchild);
	printf("\t%d",root->data);
}

4,二叉树的右视图

/* 输出二叉树的右视图 */
void printRightView(TreeNode *pstNode, int iLeval, int *piRight, int *piSize)
{
    if(NULL == pstNode)
        return;
 
    if(iLeval > *piSize)
    {
        *piSize = iLeval;
        piRight[iLeval] = pstNode->val;
    }
 
    printRightView(pstNode->right, iLeval+1, piRight, piSize);
    printRightView(pstNode->left, iLeval+1, piRight, piSize);
 
    return;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:32:05  更:2021-08-13 12:33:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:13:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码