首页 > 其他分享 >实现二叉树结点的新建、查找、修改

实现二叉树结点的新建、查找、修改

时间:2023-04-27 21:34:30浏览次数:35  
标签:node 结点 插入 查找 二叉树 root newdata

 如果需要新建结点(例如往二叉树里面插入结点时,可使用下面的函数(返回类型是一个指向node的指针) node* newNode(int v) { nodeNode = new node; //申请一个node类型变量的地址空间 Node->data = v; //结点权值为v Node->lchild = Node->rchild = NULL; //初始状态下无左右孩子 return Node; //返回新节点的地址 } 1 2 3 4 5 6 查找操作是指在给定的数据域内,在二叉树里面找到所有数据域(对多个结点实行操作)为给定数据域的结点,并且对查找到的结点修改为给定的数据域 void search(noderoot,int x, int newdata){ if (root == NULL) return; //考虑为空节点的可能性 if (root->data == x) { root->data = newdata; //找到数据域为x的结点,把它修改为newdata } search(root->lchild, x, newdata);//往左子树搜索 search(root->rchild, x, newdata);//往右子树搜索 } 1 2 3 4 5 6 7 8 3.实现二叉树结点的插入 关于二叉树结点的插入,由于在没有给出插入条件的问题中,很难给出插入的具体方法。因此这里以在一棵二叉搜索树中插入为例。 插入过程的核心思想,是按照给定的插入条件(例中为二叉查找树)找到树里面的边界(死胡同),此处就是查找失败的地方,也是结点需要插入的地方 void insert(node*& root, int x) { //注意 传入的是结点指针的引用 if (root == NULL) { //空树,即查找失败,插入结点(递归边界) root = newNode(x); return; } if (root->data > x) { //往左子树搜索 insert(root->lchild, x); } else insert(root->rchild, x); //往右子树搜索 } 1 2 3 4 5 6 7 8 9 10 在上述代码中,一个关键的点就是根节点指针root使用了引用&,这样在函数中可以直接修改原变量。这么做的原因是,在insert函数中新建了一个新结点,并且把新节点的地址赋给了当层的root。如果不采用引用,root = new node 这个语句对root 的修改就无法作用到原变量,也就无法将节点加到二叉树上面。 那为什么前面的search 函数不需要加引用呢?因为search 函数修改的是指针root指向的内容,而不是root本身,对结点指向的内容的修改是不需要加引用的。


标签:node,结点,插入,查找,二叉树,root,newdata
From: https://blog.51cto.com/u_16030624/6232113

相关文章

  • 请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来....
    先转载过来以后再研究importjava.io.*;importjava.util.Stack;publicclassmyTest{privatemyTreetree;/***二叉树的插入,参数为(关键字,数据)***/publicvoidinsert(intkey,intdata......
  • 山东大学数据结构实验9 二叉树操作
    描述创建二叉树类。二叉树的存储结构使用链表。提供操作:前序遍历、中序遍历、后序遍历、层次遍历、计算二叉树结点数目、计算二叉树高度。格式输入格式第一行为一个数字n(10<=n<=100000),表示有这棵树有n个节点,编号为1~n。之后n行每行两个数字,第i行的两个数字a、b表示编号......
  • 两两交换链表中的结点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)  步骤: classSolution{public:ListNode*swapPairs(ListNode*head){ListNode*dummyHead=newListNode(0);//......
  • c++,x11,linux查找窗口
    如题点击查看代码#include<X11/Xlib.h>#include<stdio.h>voidfindWindow(Display*display,Windowwindow,char**windowName,Window*result){Windowroot,parent,*children;unsignedintnChildren;if(XFetchName(display,window,windo......
  • C# 查找特性标识的所有类并获取属性值
    写个方法去获取被特性(Attribute)标记的类,并且获取标记的属性值usingOneLove.Core.ExtendedEnum;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingSystem.Threading.Tasks;namespaceOneLove.Core.Ex......
  • linux 文件查找
    1,文件夹全局查找grep"JAVA_OPTS=\"-Xms1024m"-rl/data/tomcats/2,文件内容替换:%s/www.6188cp.com/zfc_web_2/g  3,查看系统限制ulimit-a关注:其中"openfiles(-n)1024"是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接......
  • 1.9 折半查找
    第一部曲:利用low和high两个指针扫描数组的元素,求出mid中间值根据mid的值和要查找的数进行判断,如果等于就找到了直接输出,如果不等,分情况,如果要找到数小于中间值就要更新右指针high,因为是闭区间,所以high可以直接更新为high-1,如果大于中间值就要更新左指针,更新为high+1。这里面要写个......
  • 折半查找
    #include<iostream>#include<algorithm>usingnamespacestd;intmain(){ ios::sync_with_stdio(0); cin.tie(0); intarr[10]={1,56,33,69,84,2,30,99,512,321}; intlow=0,high=9; sort(arr,arr+10); inti,j,k; cout<<"此时数据为:"......
  • 折半查找
    问题描述:N个有序数数列已放在一维数组中,利用二分查找法找整数m在数组中的位置,若找到,则输出其下标值;反之,则输出“Notbefound!".完整程序:#include<stdio.h>#defineN10main(){inti,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m;printf{"a数组中的数据......
  • 折半查找(二分查找法)
    问题描述:N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下标值;反之,则输出“Notbefound!”。代码:#include<iostream>#defineN10intmain(){ intk,i0=-1,a[N]={3,12,30,34,45,57,66,78,89,100}; intmid=(N-1)/......