`
chriszeng87
  • 浏览: 738321 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二叉树中所有节点的左右子树相互交换 递归与非递归程序

阅读更多
//将二叉树中所有节点的左右子树相互交换
[cpp] view plaincopy
 
  1. BiNode* Exchange(BiNode* T)  
  2. {  
  3.  BiNode* p;  
  4.  if(NULL==T || (NULL==T->lchild && NULL==T->rchild))  
  5.   return T;  
  6.  p = T->lchild;  
  7.  T->lchild = T->rchild;  
  8.  T->rchild = p;  
  9.  if(T->lchild)  
  10.  {  
  11.   T->lchild = Exchange(T->lchild);  
  12.  }  
  13.  if(T->rchild)  
  14.  {  
  15.   T->rchild = Exchange(T->rchild);  
  16.  }  
  17.  return T;  
  18. }  
 
//将二叉树中所有节点的左右子树相互交换
//不使用递归
[cpp] view plaincopy
 
  1. void NonRecursive_Exchange(BiNode* T)  
  2. {  
  3.  Stack s;  
  4.  BiNode* p;  
  5.  if(NULL==T)  
  6.   return;  
  7.  InitStack(&s);  
  8.  Push(&s,T);  
  9.  while(!isEmpty(&s))  
  10.  {  
  11.   T = Pop(&s);  
  12.   p = T->lchild;  
  13.   T->lchild = T->rchild;  
  14.   T->rchild = p;  
  15.    
  16.   if(T->rchild)  
  17.    Push(&s,T->rchild);  
  18.   if(T->lchild)  
  19.    Push(&s,T->lchild);   
  20.  }   
  21.  DestroyStack(&s);   
  22. }  
分享到:
评论

相关推荐

    erchashu.rar_交换 二叉树 左右子树_交换左右子树

    总结来说,交换二叉树左右子树的操作涉及对二叉树节点的重新排列。这个过程可以通过递归或迭代的算法实现,其中递归方法更为直观。通过中序遍历序列,我们可以验证交换操作的正确性。在给定的场景中,`erchashu.doc`...

    二叉树的创建 遍历 交换子树

    为了验证左右子树交换操作,定义了`swap`函数。该函数交换二叉树节点的左右子树,同时递归地对左右子树执行相同的操作。交换完成后,可以通过遍历二叉树并打印节点序列,对比交换前后的节点顺序,从而验证交换是否...

    交换二叉树左右子树的运算

    交换二叉树的左右子树并不会改变树中节点的顺序,只是改变了节点的相对位置,使得原本在左侧的子树现在位于右侧,反之亦然。 交换二叉树左右子树的运算可以通过递归或非递归的方式来实现。以下是一种基于递归的...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    可实现: 输入相应元素,用先序创建二叉树(无元素处用“#”) 递归先序遍历二叉树: ... 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树:

    二叉树的左右子树交换(C++)

    通过上述分析,我们可以看到,二叉树的左右子树交换涉及到对二叉树节点结构的理解和操作。在实际编程中,注意细节的处理,比如正确地交换子节点的指针,是至关重要的。此外,利用递归的思想来实现二叉树的操作是一种...

    C语言_二叉树建立、遍历、交换子树代码

    该函数将当前节点的左右子树交换,然后递归地交换左右子树。 本资源提供了C语言中二叉树的建立、遍历和交换子树的实现代码,涵盖了前序、中序、后序和层次遍历等多种遍历方式,并且提供了交换二叉树中所有结点的...

    编写一个将二叉树中每个结点的左右孩子交换的算法。

    在本题中,我们首先处理当前节点,然后递归地处理其左右子树。 **3. 代码实现** 下面是一个用C语言实现的将二叉树中每个节点的左右孩子交换的算法: ```c typedef struct BTreeNode { int data; struct ...

    二叉树的建立,遍历及子树交换

    子树交换是指交换二叉树中两个子节点的位置,这可能涉及到整个子树的移动。例如,如果节点P的左子树是Q,右子树是R,而我们想交换Q和R,那么交换后的结果应为P的左子树变为R,右子树变为Q。这个操作可以通过临时保存...

    (二叉树遍历.

    二叉树的遍历是指按照某种顺序访问树中的所有节点,且每个节点恰好被访问一次的过程。 #### 二、二叉树遍历方法 二叉树遍历主要有三种方式:前序遍历、中序遍历和后序遍历。这三种遍历方法的区别在于访问根节点的...

    二叉树代码 C语言 17个基本函数 递归 非递归

    在C语言中,我们通常通过结构体来定义二叉树节点,包含一个数据域(存储元素)和两个指向子节点的指针: ```c typedef struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; } ...

    中序遍历+子树交换+叶子结点

    本文将深入探讨标题中提到的三个关键概念:中序遍历、子树交换以及叶子结点,并结合提供的文件名,推测这些内容可能与实现相关算法有关。 首先,我们来讨论“中序遍历”。中序遍历是二叉树遍历的一种方法,按照“左...

    二叉树的各种遍历 递归非递归

    二叉树的相似性通常是指两棵树经过左右子树交换后能够互相转换。判断两个二叉树是否相似,可以分别进行先序遍历或后序遍历,比较得到的序列是否相同(忽略节点的顺序)。 哈夫曼树(Huffman Tree) 哈夫曼树是一种...

    二叉树的创建、遍历、叶子节点计算及线索树等完整程序

    二叉树的创建、遍历、以及左右子树交换,非递归遍历,叶子节点计算及线索树等完整程序

    二叉树的创建,遍历,叶子结点数,结点数,交换左右子树的源代码

    后序遍历的非递归版本较为复杂,除了使用栈来保存节点外,还需要一个额外的数组`flag`来标记左右子树是否已被访问。 - **层次遍历** ```c void layerorder(bintree root) { binnode *q[100]; bintree t; int ...

    树和二叉树的常规算法

    4. **二叉树中所有节点的左右子树交换**:这是一个递归操作,首先交换当前节点的左右子树,然后分别对左右子树执行相同的操作,确保整个树的结构被更新。 5. **求以X为值的节点为根的子树深度**:这个算法首先在...

    遍历二叉树的非递归实现

    - 左右子树是有区别的,即它们的顺序不可交换。 #### 三、遍历二叉树的基本概念 遍历二叉树是指按某种顺序访问二叉树的所有节点,确保每个节点恰好被访问一次。遍历的基本方式有三种: 1. **先序遍历**:访问顺序...

    数据结构树的程序设计

    13. **将二叉树左右孩子交换的函数Revolute()**:函数`Bitree_Revolute(bt)`实现了二叉树所有节点的左右子树交换,这是一个递归操作,先交换根节点的左右子树,然后递归处理左右子树。 这些函数共同构成了一个...

    二叉树操作实验报告(精.选).pdf

    实验报告涉及的是二叉树的基本操作,主要包括二叉树的创建、遍历、左右子树交换以及层次遍历,这些都是数据结构与算法中重要的概念。以下是这些知识点的详细解释: 一、二叉树的逻辑特点与性质 二叉树是一种特殊的...

    二叉树的基本操作

    二叉树的常见类型包括满二叉树(所有层都完全填充,除了可能的最后一层,且最后一层的所有节点都尽可能靠左)、完全二叉树(除了最后一个节点外,所有层都是完全填充的)和平衡二叉树(左右子树的高度差不超过1)。...

Global site tag (gtag.js) - Google Analytics