首页 > 其他分享 >二叉树

二叉树

时间:2023-06-24 22:31:41浏览次数:34  
标签:lchild 遍历 BiTree 二叉树 printf rchild

#include  <stdio.h>
#include  <stdlib.h>
#include <malloc.h>

typedef  struct  BTNode {
	char  data  ;
	struct  BTNode  *lchild;
	struct  BTNode  *rchild  ;
} *BiTree;

void  createBiTree(BiTree  *t) {
//此处补充代码,输入二叉树的先序遍历序列建立二叉树
	char s;
	BiTree q;
	s = getchar();
	getchar();
	if (s == '#') {
		*t = NULL;
		return ;
	}
	q = (BiTree)malloc(sizeof(struct BTNode));
	q->data = s;
	*t = q;
	createBiTree(&q->lchild);
	createBiTree(&q->rchild);

}

//此处补充代码,定义函数,交换二叉树结点的左右孩子
void swapChildren(BiTree p) {
	if (p) {
		BiTree temp = p->lchild;
		p->lchild = p->rchild;
		p->rchild = temp;
		swapChildren(p->lchild);
		swapChildren(p->rchild);
	}
}



void  PreOrder(BiTree  p) {
	//此处补充代码完成二叉树的先序遍历
	if (p) {
		printf("%c", p->data);
		PreOrder(p->lchild);
		PreOrder(p->rchild);
	}

}

void  InOrder(BiTree  p) {
//此处补充代码完成二叉树的中序遍历
	if (p) {
		InOrder(p->lchild);
		printf("%c", p->data);
		InOrder(p->rchild);
	}

}

void  PostOrder(BiTree  p) {
//此处补充代码完成二叉树的后序遍历
	if (p) {
		PostOrder(p->lchild);
		PostOrder(p->rchild);
		printf("%c", p->data);
	}


}

int  main() {
	//此处补充代码,调用函数完成原二叉树的三种遍历序列及交换左右孩子后的三种遍历序列
	BiTree t = NULL;
	createBiTree(&t);

	printf("preorder:");
	PreOrder(t);
	printf("\n");
	printf("inorder:");
	InOrder(t);
	printf("\n");
	printf("postorder:");
	PostOrder(t);
	printf("\n");
	printf("After swap:");
	swapChildren(t);
	printf("\n");
	printf("preorder:");
	PreOrder(t);
	printf("\n");
	printf("inorder:");
	InOrder(t);
	printf("\n");
	printf("postorder:");
	PostOrder(t);
	printf("\n");

	return  0;
}

标签:lchild,遍历,BiTree,二叉树,printf,rchild
From: https://blog.51cto.com/u_16030624/6542083

相关文章

  • [leetcode]114. 二叉树展开为链表
    总结:怎样写递归函数?关键是把递归函数的功能定义清楚,并在递归函数体中使用自身来做事,此时不要关注递归函数执行的细节。也就是写高层级代码的时候不要关注低层级的事情,这就叫抽象。关注也没有用,想不清楚的。 1classSolution{2publicvoidflatten(TreeNoderoot){......
  • 代码随想录算法训练营第十六天| 找树左下角的值 路径总和 从中序与后序遍历序列
    找树左下角的值1,层序遍历,较为简单:1intfindBottomLeftValue_simple(TreeNode*root){2intresult=0;3if(!root)returnresult;4queue<TreeNode*>selected;5selected.push(root);67while(!selected.empty())8{9......
  • 代码随想录算法训练营第十五天| 110.平衡二叉树 (优先掌握递归) 257. 二叉树的所有路径
     110.平衡二叉树(优先掌握递归)难点:要求每个节点的左右字数的高度相减<=1,因此,需要对每个节点都进行检查,难就难在怎么获得任意节点的高度其中递归是最简单的: 1intisB_cursor(TreeNode*node,bool&isBalance)2{3if(isBalance==false)return0;4if......
  • 代码随想录算法训练营第十四天| 104.二叉树的最大深度 (优先掌握递归) 111.二叉树的最小
    104.二叉树的最大深度(优先掌握递归)迭代法,上一篇已经讲过,只需要对每一层+1,这里重要些递归法递归法注意:如果当前节点为NULL,返回0,不是NULL,那么就是1+max(right,left)代码:1voidmaxD_cursor(TreeNode*node,int&result)2{3if(!node)return;45result......
  • 交换二叉树
    #include<stdio.h>#include<stdlib.h>#include<malloc.h>typedefstructBTNode{ chardata; structBTNode*lchild; structBTNode*rchild;}*BiTree;voidcreateBiTree(BiTree*t){//此处补充代码,输入二叉树的先序遍历序列建立二叉树 chars;......
  • 20230314 3.2. 二叉树
    二叉树的定义二叉树T:一个有穷的结点集合。这个集合可以为空若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。二叉树具体五种基本形态:空二叉树;只有根结点的二叉树;只有根结点和左子树TL的二叉树;只有根结点和右子树TR的二叉树;具有根结点、左......
  • 代码随想录算法训练营第十三天| 层序遍历 226.翻转二叉树 (优先掌握递归) 101. 对
    层序遍历注意:1,使用队列的形式,依次入队,同时对队列进行计数2,知道数目消失,才进行下一个队列代码:1vector<vector<int>>levelOrder(TreeNode*root)2{3vector<vector<int>>result;4if(root==NULL)returnresult;5queue<TreeNode*>selected;6......
  • 数据结构和算法系列课程(01)--- 排序二叉树和红黑树
    把排序二叉树放在这个系列课程的第一个部分似乎有些唐突,但是考虑到它在面试中出现的可能性,把它放在这样的一个位置也就不足为奇了。关于树和二叉树的基础知识,可以到下面的链接中下载我的课件进行了解。下面给出一个排序二叉树的Java实现:packagcom.loonstudio;/***排序二叉树......
  • 单值二叉树
    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false来源:力扣(LeetCode)链接:https://leetcode.cn/problems/univalued-binary-t......
  • 翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]来源:力扣(LeetCode)链接:https://leetcode.cn/problems/invert-binary-tree著作权归......