当前位置:   article > 正文

头歌Java数据结构实训作业——二叉树_头歌实践教学平台顺序存储结构二叉树答案

头歌实践教学平台顺序存储结构二叉树答案

Java 数据结构之二叉树

二叉树的定义:

二叉树是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。这是二叉树的递归定义。

二叉树的遍历:

所谓遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题

对于二叉树的遍历,可进一步分为三种:

前序遍历(根左右):对于每一棵子树,先访问该节点,然后是左子树,最后是右子树

中序遍历(左根右):对于每一棵子树,先访问左子树,然后是该节点,最后是右子树

③后序遍历(左右根):对于每一棵子树,先访问左子树,然后是右子树,最后是该节点

其中递归是实现上三种遍历逻辑最简单的方式

第1关:二叉树的实现之前序遍历

1.任务描述

本关任务:完成用二叉链表存储的二叉树的前序遍历算法。

  • 补全preOrder(TreeNode root)方法,实现二叉树的前序遍历功能,并输出结点的值。

2.本关答案

        本关要求我们实现二叉树的前序遍历,我们根据递归来实现根左右的遍历方式

  1. package step1;
  2. /**
  3. * Created by zengpeng on 2018/2/9.
  4. */
  5. public class BinaryTree {
  6. private TreeNode root;//根节点
  7. public BinaryTree() {
  8. root = null;
  9. }
  10. public void preOrder(TreeNode root) {
  11. /********** Begin *********/
  12. //递归实现 根左右
  13. if(root==null){
  14. return;
  15. }
  16. System.out.println(root.item);
  17. preOrder(root.leftChild);
  18. preOrder(root.rightChild);
  19. /********** End *********/
  20. }
  21. /**
  22. *以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
  23. *
  24. * @param arr
  25. * @param n
  26. * @return
  27. */
  28. public TreeNode createTree(int arr[]) {
  29. TreeNode tmp[] = new TreeNode[arr.length + 1];
  30. for (int k = 1; k <= arr.length; k++) {
  31. TreeNode node = new TreeNode(arr[k - 1]);
  32. tmp[k] = node;
  33. if (k == 1) {
  34. root = node;
  35. } else {
  36. int j = k / 2;
  37. if (k % 2 == 0) {
  38. tmp[j].leftChild = node;
  39. } else {
  40. tmp[j].rightChild = node;
  41. }
  42. }
  43. }
  44. return root;
  45. }
  46. public static class TreeNode {
  47. private TreeNode leftChild;
  48. private TreeNode rightChild;
  49. private int item;
  50. public TreeNode(int item) {
  51. this(null, null, item);
  52. }
  53. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  54. this.leftChild = leftChild;
  55. this.rightChild = rightChild;
  56. this.item = item;
  57. }
  58. }
  59. }

第2关:二叉树的实现之中序遍历

1.任务描述

本关任务:实现以二叉链表存储的二叉树的中序遍历算法。

补全inOrder(TreeNode root)方法,实现二叉树的中序遍历功能,并输出结点的值

2.本关答案

        本关要求我们实现二叉树的中序遍历,我们根据递归来实现左根右的遍历方式

  1. package step2;
  2. /**
  3. * Created by zengpeng on 2018/2/12.
  4. */
  5. public class BinaryTree {
  6. private TreeNode root;//根节点
  7. public BinaryTree() {
  8. root = null;
  9. }
  10. public void inOrder(TreeNode root) {
  11. /********** Begin *********/
  12. //递归实现 左根右
  13. if(root==null){
  14. return;
  15. }
  16. inOrder(root.leftChild);
  17. System.out.println(root.item);
  18. inOrder(root.rightChild);
  19. /********** End *********/
  20. }
  21. /**
  22. * 以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
  23. *
  24. * @param arr
  25. * @param n
  26. * @return
  27. */
  28. public TreeNode createTree(int arr[]) {
  29. TreeNode tmp[] = new TreeNode[arr.length + 1];
  30. for (int k = 1; k <= arr.length; k++) {
  31. TreeNode node = new TreeNode(arr[k - 1]);
  32. tmp[k] = node;
  33. if (k == 1) {
  34. root = node;
  35. } else {
  36. int j = k / 2;
  37. if (k % 2 == 0) {
  38. tmp[j].leftChild = node;
  39. } else {
  40. tmp[j].rightChild = node;
  41. }
  42. }
  43. }
  44. return root;
  45. }
  46. public static class TreeNode {
  47. private TreeNode leftChild;
  48. private TreeNode rightChild;
  49. private int item;
  50. public TreeNode(int item) {
  51. this(null, null, item);
  52. }
  53. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  54. this.leftChild = leftChild;
  55. this.rightChild = rightChild;
  56. this.item = item;
  57. }
  58. }
  59. }

第3关: 二叉树的实现之后序遍历

1.任务描述

本关任务:实现以二叉链表存储的二叉树的后序遍历算法。

  • 补全postOrder(TreeNode root)方法,实现后序遍历功能,并输出结点值。

2.本关答案

        本关要求我们实现二叉树的后序遍历,我们根据递归来实现左右根的遍历方式

  1. package step3;
  2. /**
  3. * Created by zengpeng on 2018/2/12.
  4. */
  5. public class BinaryTree {
  6. private TreeNode root;//根节点
  7. public BinaryTree() {
  8. root = null;
  9. }
  10. public void postOrder(TreeNode root) {
  11. /********** Begin *********/
  12. //递归实现 左右根
  13. if(root==null){
  14. return;
  15. }
  16. postOrder(root.leftChild);
  17. postOrder(root.rightChild);
  18. System.out.println(root.item);
  19. /********** End *********/
  20. }
  21. /**
  22. * 以数组arr的数据,依次从上至下,从左至右构建一颗二叉树
  23. *
  24. * @param arr
  25. * @param n
  26. * @return
  27. */
  28. public TreeNode createTree(int arr[]) {
  29. TreeNode tmp[] = new TreeNode[arr.length + 1];
  30. for (int k = 1; k <= arr.length; k++) {
  31. TreeNode node = new TreeNode(arr[k - 1]);
  32. tmp[k] = node;
  33. if (k == 1) {
  34. root = node;
  35. } else {
  36. int j = k / 2;
  37. if (k % 2 == 0) {
  38. tmp[j].leftChild = node;
  39. } else {
  40. tmp[j].rightChild = node;
  41. }
  42. }
  43. }
  44. return root;
  45. }
  46. public static class TreeNode {
  47. private TreeNode leftChild;
  48. private TreeNode rightChild;
  49. private int item;
  50. public TreeNode(int item) {
  51. this(null, null, item);
  52. }
  53. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  54. this.leftChild = leftChild;
  55. this.rightChild = rightChild;
  56. this.item = item;
  57. }
  58. }
  59. }

Java 数据结构之二叉搜索树

第1关:二叉搜索树的介绍与构建

1.任务描述

本关任务:构建一棵二叉搜索树,向其中添加结点。

  • 平台将创建用户补全后的BSTree类的对象;
  • 调用对象的insert(int key)方法,向树中添加结点;
  • 调用对象的preOrder()方法执行前序遍历;
  • 调用对象的inOrder()方法执行中序遍历;
  • 调用对象的postOrder()方法执行后序遍历;
  • 接着根据程序的输出判断程序是否正确。

2.相关知识

        二叉搜索树(binary search tree),又称二叉排序树,它或者是空树,或者是满足如下性质的二叉树:

  1. 若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
  2. 若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
  3. 左、右子树本身又各是一棵二叉排序树。

33061458aabb4558b80e430bb4b3e8fc.png

3.思路分析

        本关要求我们实现二叉树的插入操作insert

        首先我们来分析BSTree类中已经给我们了的方法

        首先就是节点类TreeNode:其中该类是BSTree的静态内部类,外部类可直接调用该内部类的成员变量和方法

  1. //节点内部类
  2. public static class TreeNode {
  3. private TreeNode leftChild;//左孩子
  4. private TreeNode rightChild;//右孩子
  5. private int item;
  6. public TreeNode(int item) {
  7. this(null, null, item);
  8. }
  9. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  10. this.leftChild = leftChild;
  11. this.rightChild = rightChild;
  12. this.item = item;
  13. }
  14. }

        然后就是BSTree的成员变量以及方法:一个成员变量root表示该树的根节点,空参的构造方法表示构建一个空树;然后是三种基本的遍历方式

        题目要求我们补全插入节点的代码

        我们根据二叉搜索树的性质,我们从根节点root开始一直向下寻找合适的插入位置,若插入的节点小于比较的节点,那么我们就向比较节点的左孩子处向下寻找;若插入的节点大于比较的节点,那么我们就向比较节点的右孩子处向下寻找,直到找到合适的位置

4.本关答案

  1. package step1;
  2. /**
  3. * Created by zengpeng on 2018/3/3.
  4. */
  5. public class BSTree {
  6. private TreeNode root;//根结点
  7. public BSTree() {
  8. root = null;
  9. }
  10. /**
  11. * 向树root中插入key
  12. *
  13. * @param key 要插入的值
  14. */
  15. public void insert(int key) {
  16. /********** Begin *********/
  17. TreeNode newnode=new TreeNode(key);
  18. if(root==null){//树为空,要插入的节点即为根节点
  19. root=newnode;
  20. }else{
  21. TreeNode cur=root;
  22. while(cur!=null){
  23. if(cur.item==key){//已经存在
  24. return;
  25. }else if(key<cur.item){//在该节点的左边
  26. if(cur.leftChild==null){
  27. cur.leftChild=newnode;
  28. }else{//继续向左找
  29. cur=cur.leftChild;
  30. }
  31. }else if(key>cur.item){//在该节点的右边
  32. if(cur.rightChild==null){
  33. cur.rightChild=newnode;
  34. }else{//继续向右找
  35. cur=cur.rightChild;
  36. }
  37. }
  38. }
  39. }
  40. /********** End *********/
  41. }
  42. //前序遍历
  43. public void preOrder() {
  44. preOrder(root);
  45. }
  46. //中序遍历
  47. public void inOrder() {
  48. inOrder(root);
  49. }
  50. //后序遍历
  51. public void postOrder(){
  52. postOrder(root);
  53. }
  54. private void preOrder(TreeNode node) {
  55. if (node != null) {
  56. System.out.print(node.item + " ");
  57. preOrder(node.leftChild);
  58. preOrder(node.rightChild);
  59. }
  60. }
  61. private void inOrder(TreeNode node) {
  62. if (node != null) {
  63. inOrder(node.leftChild);
  64. System.out.print(node.item + " ");
  65. inOrder(node.rightChild);
  66. }
  67. }
  68. private void postOrder(TreeNode node) {
  69. if (node != null) {
  70. postOrder(node.leftChild);
  71. postOrder(node.rightChild);
  72. System.out.print(node.item + " ");
  73. }
  74. }
  75. //节点内部类
  76. public static class TreeNode {
  77. private TreeNode leftChild;
  78. private TreeNode rightChild;
  79. private int item;
  80. public TreeNode(int item) {
  81. this(null, null, item);
  82. }
  83. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  84. this.leftChild = leftChild;
  85. this.rightChild = rightChild;
  86. this.item = item;
  87. }
  88. }
  89. }

第2关:二叉搜索树的删除

1.任务描述

本关任务是:实现二叉搜索树的删除功能

  • 平台将创建用户补全后的BSTree类的对象;
  • 调用对象的insert(int key)()方法,构建一棵二叉搜索树;
  • 调用对象的遍历方法,输出删除元素前的各种遍历结果;
  • 调用对象的delete(int key)方法,删除元素key
  • 调用对象的遍历方法,输出删除元素后的各种遍历结果;
  • 接着根据程序的输出判断程序是否正确。

2.相关知识

从一棵二叉搜索树T中删除一个结点z的整个策略可分为三个基本情况:

  • 如果z没有孩子结点,那么只是简单地将它删除,并修改它的父结点;
  • 如果z只有一个孩子结点,那么将这个孩子提升到树中z的位置上,并修改z的父结点,使其指向z的孩子结点;
  • 如果z有两个孩子,那么找z右子树的最小节点代替z,最后删除替换后的最小节点

17fdec8f9d584dd782a623bb611ea3b6.png

e9c9d4cce986440ebe1f14784ff6640e.png

510d071759284a5a91e29673ebb491f5.png

3.思路分析

        我们可以观察到,在第三种情况下(删除节点有左右两个节点),当我们将删除节点右子树的最小节点代替删除节点后,我们还需删除替换后的最小节点位置,但此时删除的情况就是情况一,二的一种,那么我们就可以从第三种情况开始,若存在第三种情况,那么我们就可以将其转化为第一二种情况的一种

        那么具体怎么操作呢?以下图为例:

75d8a5855f874fa3a7dd7b5fa15ec66e.png

        首先要删除一个节点,就要知道它的父节点以及其孩子节点,因此首先我们要先找到删除节点的父节点

833d478f07214238b4323110463fea21.png

        然后我们从第三种情况开始考虑:找到删除节点右子树的最小节点并与删除节点替换,将其转换为一二种情况

90cd8dbabba8469b8582aadb5554e239.png

       

        那么此时要删除的节点以及其父节点就变了,我们要重新记录

c973b79f2bad456c9345b7268f6396b4.png

        最后我们就要寻找删除节点的孩子节点,并将其父节点与其孩子节点相连,这样就完成了节点的删除,但我们需要考虑的是,若删除的是根节点,那么我们就直接返回其孩子节点即可,不用再更改其父节点的指针了(根节点的父节点为null)

8e7d9e5f2ff94e92973498fe3d0ed0b3.png

        当然特殊情况(parent==null)不会包括第三种情况,因为经转化后删除节点必定有父节点;因此该特殊情况只存在于第一二中

4.本关答案

  1. package step2;
  2. /**
  3. * Created by zengpeng on 2018/3/14.
  4. */
  5. public class BSTree {
  6. private TreeNode root;//根结点
  7. public BSTree() {
  8. root = null;
  9. }
  10. /**
  11. * 向树root中插入a
  12. *
  13. * @param key 要插入的值
  14. */
  15. public void insert(int key) {
  16. TreeNode x = root;
  17. TreeNode p = null;//始终指向x的父结点
  18. while (x != null) {
  19. p = x;
  20. if (key < x.item) {
  21. x = x.leftChild;
  22. } else {
  23. x = x.rightChild;
  24. }
  25. }
  26. if (null == p) {//空树
  27. root = new TreeNode(key);
  28. } else if (key < p.item) {
  29. p.leftChild = new TreeNode(key);
  30. } else {
  31. p.rightChild = new TreeNode(key);
  32. }
  33. }
  34. /**
  35. * 在树root中删除结点key
  36. *
  37. * @param key
  38. * @return
  39. */
  40. public void delete(int key) {
  41. root = delete(root, key);
  42. }
  43. private TreeNode delete(TreeNode x, int key) {
  44. /********** Begin *********/
  45. //三种情况
  46. TreeNode cur=x;
  47. TreeNode parent=null;
  48. while(x!=null && x.item!=key){
  49. parent=x;
  50. if(key<x.item){
  51. x=x.leftChild;
  52. }else{
  53. x=x.rightChild;
  54. }
  55. }
  56. //删除节点不存在
  57. if(x==null) return cur;
  58. //第三种情况:将删除节点与其右子树最小节点交换,并删除交换后的最小节点
  59. if(x.leftChild!=null && x.rightChild!=null){
  60. TreeNode mininode=x.rightChild;
  61. TreeNode miniparent=x;
  62. while(mininode.leftChild!=null){
  63. miniparent=mininode;
  64. mininode=mininode.leftChild;
  65. }
  66. //删除交换后的最小节点位置,转化为其他两种情况
  67. x.item=mininode.item;
  68. parent=miniparent;
  69. x=mininode;
  70. }
  71. //最后两种情况,找删除节点的孩子节点
  72. TreeNode child;
  73. if(x.rightChild!=null){
  74. child=x.rightChild;
  75. }else if(x.leftChild!=null){
  76. child=x.leftChild;
  77. }else{
  78. child=null;
  79. }
  80. //删除的是根节点
  81. if(parent==null) return child;
  82. //删除节点
  83. if(parent.leftChild==x){
  84. parent.leftChild=child;
  85. }else if(parent.rightChild==x){
  86. parent.rightChild=child;
  87. }
  88. return cur;
  89. /********** End *********/
  90. }
  91. /**
  92. * 删除树x中的最小结点
  93. *
  94. * @param x
  95. * @return
  96. */
  97. private TreeNode deleteMin(TreeNode x) {
  98. if (x.leftChild == null) return x.rightChild;
  99. x.leftChild = deleteMin(x.leftChild);
  100. return x;
  101. }
  102. /**
  103. * 查找树x中的最小结点
  104. *
  105. * @param x
  106. * @return
  107. */
  108. private TreeNode min(TreeNode x) {
  109. TreeNode p = x;
  110. while (p.leftChild != null) {
  111. p = p.leftChild;
  112. }
  113. return p;
  114. }
  115. public void preOrder() {
  116. preOrder(root);
  117. }
  118. private void preOrder(TreeNode node) {
  119. if (node != null) {
  120. System.out.print(node.item + " ");
  121. preOrder(node.leftChild);
  122. preOrder(node.rightChild);
  123. }
  124. }
  125. public void inOrder() {
  126. inOrder(root);
  127. }
  128. private void inOrder(TreeNode node) {
  129. if (node != null) {
  130. inOrder(node.leftChild);
  131. System.out.print(node.item + " ");
  132. inOrder(node.rightChild);
  133. }
  134. }
  135. public void postOrder() {
  136. postOrder(root);
  137. }
  138. private void postOrder(TreeNode node) {
  139. if (node != null) {
  140. postOrder(node.leftChild);
  141. postOrder(node.rightChild);
  142. System.out.print(node.item + " ");
  143. }
  144. }
  145. public static class TreeNode {
  146. private TreeNode leftChild;
  147. private TreeNode rightChild;
  148. private int item;
  149. public TreeNode(int item) {
  150. this(null, null, item);
  151. }
  152. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  153. this.leftChild = leftChild;
  154. this.rightChild = rightChild;
  155. this.item = item;
  156. }
  157. }
  158. }

第3关:二叉搜索树的查找

1.任务描述

本关任务:实现二叉搜索树的查找功能,如果指定的元素x存在树中则返回true,否则返回false

  • 平台将创建用户补全后的BSTree类的对象;
  • 调用对象的insert(int key)方法,构建一棵二叉搜索树;
  • 调用对象的preOrder()方法,输出删除操作前树中的结点;
  • 调用对象的delete(int key)方法,删除最先添加的结点和最后添加的结点;
  • 调用对象的preOrder()方法,输出删除操作后树中的结点;
  • 调用对象的search(int key)方法,测试原来的结点哪些还在树中;
  • 接着根据程序的输出判断程序是否正确。

2.思路分析

        根据二叉搜索树的性质,小了向左,大了向右,直到找到

3.本关答案

  1. package step3;
  2. /**
  3. * Created by zengpeng on 2018/3/14.
  4. */
  5. public class BSTree {
  6. private TreeNode root;//根结点
  7. public BSTree() {
  8. root = null;
  9. }
  10. /**
  11. * 向树root中插入a
  12. *
  13. * @param key 要插入的值
  14. */
  15. public void insert(int key) {
  16. TreeNode x = root;
  17. TreeNode p = null;//始终指向x的父结点
  18. while (x != null) {
  19. p = x;
  20. if (key < x.item) {
  21. x = x.leftChild;
  22. } else {
  23. x = x.rightChild;
  24. }
  25. }
  26. if (null == p) {//空树
  27. root = new TreeNode(key);
  28. } else if (key < p.item) {
  29. p.leftChild = new TreeNode(key);
  30. } else {
  31. p.rightChild = new TreeNode(key);
  32. }
  33. }
  34. /**
  35. * 判断树root中是否包含key,包含则返回true,不包含返回false
  36. *
  37. * @param key
  38. * @return
  39. */
  40. public boolean search(int key) {
  41. /********** Begin *********/
  42. TreeNode p = root;
  43. //小了向左,大了向右
  44. while (p != null && key != p.item) {
  45. if (key < p.item) {
  46. p = p.leftChild;
  47. } else {
  48. p = p.rightChild;
  49. }
  50. }
  51. if (p == null) {
  52. return false;
  53. } else {
  54. return true;
  55. }
  56. /********** End *********/
  57. }
  58. /**
  59. * 在树root中删除结点key
  60. *
  61. * @param key
  62. * @return
  63. */
  64. public void delete(int key) {
  65. root = delete(root, key);
  66. }
  67. private TreeNode delete(TreeNode x, int key) {
  68. if (x == null) {
  69. return null;
  70. }
  71. if (key < x.item) {
  72. x.leftChild = delete(x.leftChild, key);
  73. } else if (key > x.item) {
  74. x.rightChild = delete(x.rightChild, key);
  75. } else {
  76. if (x.leftChild == null) return x.rightChild;
  77. if (x.rightChild == null) return x.leftChild;
  78. TreeNode t = x;
  79. x = min(t.rightChild);
  80. x.rightChild = deleteMin(t.rightChild);
  81. x.leftChild = t.leftChild;
  82. }
  83. return x;
  84. }
  85. /**
  86. * 删除树x中的最小结点
  87. * @param x
  88. * @return
  89. */
  90. private TreeNode deleteMin(TreeNode x) {
  91. if (x.leftChild == null) return x.rightChild;
  92. x.leftChild = deleteMin(x.leftChild);
  93. return x;
  94. }
  95. /**
  96. * 查找树x中的最小结点
  97. *
  98. * @param x
  99. * @return
  100. */
  101. private TreeNode min(TreeNode x) {
  102. TreeNode p = x;
  103. while (p.leftChild != null) {
  104. p = p.leftChild;
  105. }
  106. return p;
  107. }
  108. public void preOrder() {
  109. preOrder(root);
  110. }
  111. public void inOrder() {
  112. inOrder(root);
  113. }
  114. public void postOrder() {
  115. postOrder(root);
  116. }
  117. private void preOrder(TreeNode node) {
  118. if (node != null) {
  119. System.out.print(node.item + " ");
  120. preOrder(node.leftChild);
  121. preOrder(node.rightChild);
  122. }
  123. }
  124. private void inOrder(TreeNode node) {
  125. if (node != null) {
  126. inOrder(node.leftChild);
  127. System.out.print(node.item + " ");
  128. inOrder(node.rightChild);
  129. }
  130. }
  131. private void postOrder(TreeNode node) {
  132. if (node != null) {
  133. postOrder(node.leftChild);
  134. postOrder(node.rightChild);
  135. System.out.print(node.item + " ");
  136. }
  137. }
  138. public static class TreeNode {
  139. private TreeNode leftChild;
  140. private TreeNode rightChild;
  141. private int item;
  142. public TreeNode(int item) {
  143. this(null, null, item);
  144. }
  145. public TreeNode(TreeNode leftChild, TreeNode rightChild, int item) {
  146. this.leftChild = leftChild;
  147. this.rightChild = rightChild;
  148. this.item = item;
  149. }
  150. }
  151. }

Java算法与数据结构测试——二叉树

第1关:向二叉树中插入叶子节点

1.任务描述

本关任务:向二叉树中插入左叶子节点,请补全insertLeft(T x, Node<T> parent)函数实现插入左叶子节点的功能

2.思路分析

        我们主要看本关已经给出的insertRight方法,本关要求我们补全插入左子节点的方法,这与insertRight思路逻辑一致,我们只需稍微更改一下孩子的指向即可

  1. //在当前二叉树的parent节点中插入一个新的左子结点,若已存在左子树,则将该左子树变成新左子结点的右子树
  2. public boolean insertLeft(T x, Node<T> parent)
  3. {
  4. /********* Begin *********/
  5. if(parent==null) return false;
  6. Node<T> p=new Node<>(x);
  7. if(parent.lChild==null){
  8. parent.lChild=p;
  9. }else{
  10. p.rChild=parent.lChild;
  11. parent.lChild=p;
  12. }
  13. return true;
  14. /********* End *********/
  15. }
  16. //在当前二叉树的parent节点中插入一个新的右子结点,若已存在右子树,则将该右子树变成新右子结点的左子树
  17. public boolean insertRight(T x, Node<T> parent)
  18. {
  19. if(parent==null) return false;
  20. Node<T> p= new Node<T>(x);
  21. if(parent.rChild==null) parent.rChild = p;
  22. else
  23. {
  24. p.rChild = parent.rChild;
  25. parent.rChild = p;
  26. }
  27. return true;
  28. }

具体了解二叉搜索树请参考下面文章:

https://blog.csdn.net/m0_74808313/article/details/130103168

 

 

 

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/569964
推荐阅读
相关标签
  

闽ICP备14008679号