二叉树之调换左右孩子
2014-10-24 16:03
225 查看
1 # include<stdio.h> struct dll{ struct Element* head; int size; }; struct Element{ int value; struct Element* p; struct Element* r; }; typedef struct Element Element; typedef struct dll dll; void add(dll* m, int k){ //添加树分支 Element* ptr; ptr = (int *)malloc(10 * sizeof(int)); ptr->value = k; ptr->r = NULL; ptr->p = NULL; Element* head = m->head; while (1){ int a = ((head->value) > k); int b = (head->p == NULL); int c = (head->r == NULL); if (a == 1) { if (b == 1) { head->p = ptr; break; } else head = head->p; } else { if (c == 1) { head->r = ptr; break; } else head = head->r; } } } void init(dll* m, int k){ //树初始化第一个元素 Element* ptr; ptr = (int *)malloc(10 * sizeof(int)); ptr->value = k; m->head = ptr; ptr->r = NULL; ptr->p = NULL; m->size = m->size + 1; } void ChangLeftRight(dll* t){ //调换左右孩子 Element* m = t->head; Ct(m); } int Ct(Element* t){ int tmp=0; if ((t->p != NULL) && (t->r != NULL)) { tmp = t->p->value; t->p->value = t->r->value; t->r->value = tmp; } if ((t->p != NULL)) Ct(t->p); if ((t->r != NULL)) Ct(t->r); if (t == NULL) return 1; } void BlE(Element* k){ printf("%d ", k->value); if (k->p != NULL) BlE(k->p); if (k->r != NULL) BlE(k->r); } void Bl(dll* t){ //前序遍历 Element* head; head = (int *)malloc(10 * sizeof(int)); head = t->head; BlE(head); } void main(){ dll* t; t = (int *)malloc(20 * sizeof(int)); t->size = 0; t->head = NULL; init(t,30); add(t, 6); add(t, 2); add(t, 5); add(t, 56); add(t, 36); add(t, 9); add(t, 98); Bl(t); ChangLeftRight(t); printf("\n"); Bl(t); system("pause"); }
相关文章推荐
- leetcode 563. Binary Tree Tilt 二叉树的左右孩子绝对差之和 + DFS深度优先遍历
- 二叉树互换左右孩子
- 把二叉树中每个节点左右孩子位置交换。
- 编写一个递归算法,实现将一颗二叉树的左右孩子互换。
- 求二叉树中某结点的父结点(左右孩子表示法)
- 查看一颗二叉树的每个节点的值是否都是其左右两个孩子节点值的和
- C++作业:将左右孩子互换 / 复制一棵二叉树
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 编写一个递归算法,实现将一棵二叉树的左右孩子互换。
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- C++二叉树左右孩子的交换
- 二叉树--兄弟孩子表示法
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 1021-二叉树复制和左右子树互换
- 普通二叉树转二叉链表(孩子兄弟表示法)
- 二叉树的操作(建树,先序遍历,交换左右子树,销毁
- 数据结构学习——二叉树的层次遍历:上下左右&下上右左
- 生成二叉树(结点结构:数据域, 左孩子和右孩子指针)
- 普通二叉树转二叉链表(孩子兄弟表示法)