先选择底层的左子节点,向上找当前的根子节点,然后完成当前的根节点遍历,找到右字树,之后,找D的根子节点,完成遍历,BE,这里可以直接遍历到根节点,然后将右子树看成一个新的根节点,先找到最底层的左子节点,也就是F,向上完成C,然后将G看成一个新的根子节点,找到最底层的J。依次遍历。 后序遍历:口诀:左边最底...
中序遍历二叉树(递归) Status Middle(BiTree t){ if(!t){ return 0; } if(t){ Middle(t->lchild); //PrintElem(t->data); PrintElem(t->data); Middle(t->rchild); //PrintElem(t->data); } return 1; } //5.1 中序遍历二叉树(非递归1) Status Middle_otherOne(BiTree t,MyStack &ms...
BT->Num);95}9697//非递归实现98//没写99}100101voidLevelTraversal(BinTree BT)102{103//层次遍历,栈实现104/*BinTree T = BT;105Stack S = CreateStack();106if(!BT)107return;108Push(S, T);109while (!IsEmpty(S)){110
首先是最初的链表: Stack | Heap | | --- | --- --- head | * + ---> | 1 | * +--->| 2 | / | --- | --- --- | | | 第一步完成之后: Stack | Heap | | --- | --- --- head | * + ---> | 1 | * +--->| 2 | / | --- | --- --- | ...
char stack[MAX];int top = -1;// 遍历字符串的前半部分,将字符压入栈中 for (int i = 0; ...
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
vector<int>pre(TreeNode*root){stack<TreeNode*>qwe;vector<int>result;qwe.push(root);while(!qwe.empty()){TreeNode*node=qwe.top();// 中qwe.pop();if(node!=NULL)result.push_back(node->val);elsecontinue;qwe.push(node->right);// 右qwe.push(node->left);// 左}returnresult;} ...
层序遍历 层序遍历需要用到队列的思想。 这里先给出要用的队列相关函数 代码语言:javascript 复制 //初始化voidQueueInit(Queue*pq){assert(pq);pq->phead=pq->ptail=NULL;pq->size=0;}//销毁voidQueueDestroy(Queue*pq){assert(pq);QNode*cur=pq->phead;while(cur){QNode*next=cur->next;free(cur)...
*/#defineSTACK_NUM_MAX 100000intlargestRectangleArea(int*heights,intheightsSize){intstack[STACK_NUM_MAX]={0};/* 记录元素位置的单调栈 */inttop=-1;/* 此单调栈栈顶的索引, 初始位为-1, 栈为空*/intmax=0;intarea=0;for(inti=0;i<heightsSize;i++){/* 遍历数组 *//* 栈为空, 或者遇到...
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或...