首页 > 代码库 > 【剑指offer】二叉树中和为某一值的路径
【剑指offer】二叉树中和为某一值的路径
节点形态:
实现:
/****************************************** 二叉树的二叉链表存储 by Rowandjj 2014/5/18 ******************************************/ #include<IOSTREAM> using namespace std; /*二叉树的二叉链表存储表示*/ typedef int TElemType; typedef struct _TREENODE_ { TElemType data;//值 struct _TREENODE_ *lChild;//左孩子 struct _TREENODE_ *rChild;//右孩子 }TreeNode,*pTreeNode,**ppTreeNode; /*--------------辅助队列-------------------*/ typedef struct _QUEUE_NODE_//队列节点定义 { pTreeNode data;//数据域(存储二叉树节点) struct _QUEUE_NODE_ *pNext;//指针域 }QueueNode,*pQueueNode; typedef struct _QUEUE_ { pQueueNode pHead;//队列头指针 pQueueNode pTail;//队列尾指针 int nodeCount;//队列节点个数 }Queue,*pQueue; /*队列基本操作*/ void InitQueue(pQueue pQueueTemp); void EnQueue(pQueue pQueueTemp,pTreeNode pTreeNodeTemp); bool DeQueue(pQueue pQueueTemp,ppTreeNode ppTreeNodeTemp); bool IsQueueEmpty(Queue QueueTemp); void DestroyQueue(pQueue pQueueTemp); //----------------------------------------------------------------------- /*二叉树基本操作*/ void InitTree(ppTreeNode ppTreeNodeTemp); void CreateTree(ppTreeNode ppTreeNodeTemp); void DestroyTree(ppTreeNode ppTreeNodeTemp); bool IsEmpty(pTreeNode pTreeNodeTemp); void PreTravel(pTreeNode pTreeNodeTemp);//先序遍历 void MidTravel(pTreeNode pTreeNodeTemp);//中序遍历 void PosTravel(pTreeNode pTreeNodeTemp);//后序遍历 void LevelTravel(pTreeNode pTreeNodeTemp);//层次遍历 int GetDepth(pTreeNode pTreeNodeTemp);//求二叉树深度 void FindNode(pTreeNode pTreeNodeTemp,int data,ppTreeNode pFind);//查找节点,如果成功则用pFind返回 void Assign(pTreeNode pTreeNodeTemp,TElemType data);//赋值 void GetRoot(pTreeNode pTreeNodeTemp,void (*print)(TElemType));//获取根节点 pTreeNode GetParent(pTreeNode pTreeNodeTemp,TElemType data);//获取父节点 pTreeNode GetPoint(pTreeNode pTreeNodeTemp,TElemType data);//返回指向元素值为data的节点的指针 pTreeNode GetLeftChild(pTreeNode pTreeNodeTemp,TElemType data);//获取元素值为data的左孩子 pTreeNode GetRightChild(pTreeNode pTreeNodeTemp,TElemType data);//获取元素值为data的右孩子 pTreeNode GetLeftSibling(pTreeNode pTreeNodeTemp,TElemType data);//获取元素值为data的左兄弟 pTreeNode GetRightSibling(pTreeNode pTreeNodeTemp,TElemType data);//获取元素值为data的右兄弟 bool InsertChild(pTreeNode pTreeNodeTemp,int flag,pTreeNode pTreeNew);//将pTreeNew整体插到pTreeNodeTemp中,约定pTreeNew右子树为空,根据标志位flag的0或者1来判断插入位置 bool DeleteChild(pTreeNode pTreeNodeTemp,int flag);//flag==0,删除左子树,否则删除右子树 void printNode(TElemType e); //-------------队列基本操作实现---------------------------------- void InitQueue(pQueue pQueueTemp) { pQueueTemp->pHead = pQueueTemp->pTail = (pQueueNode)malloc(sizeof(QueueNode)); if(pQueueTemp->pHead == NULL) { return; } pQueueTemp->pHead->pNext = NULL; pQueueTemp->nodeCount = 0; } void EnQueue(pQueue pQueueTemp,pTreeNode pTreeNodeTemp) { pQueueNode pNodeNew = (pQueueNode)malloc(sizeof(QueueNode)); if(pNodeNew != NULL) { pNodeNew->data = http://www.mamicode.com/pTreeNodeTemp;>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。