微軟100題 第一題(查詢樹轉換為有序雙向鍊錶)

2021-06-16 14:39:34 字數 1557 閱讀 3818

複習一下基礎,就把前序,中序,後序的非遞迴重新寫一遍,再把本題的遞迴和非遞迴解法也寫一下。

個人覺得三種非遞迴遍歷方式中,如果記住左節點訪問到底,然後移動一次右節點,再遍歷左節點,**應當還算比較清楚的。

// test_microsoft_q1.cpp : 定義控制台應用程式的入口點。

////非遞迴前中後遍歷

//中序轉化鍊錶

#include "stdafx.h"

#include #include using namespace std;

struct node

;node *head = new node;

node *tail = new node;

node *nodeindex = head;

stacks;

void insert(node * & root,int value)

if (value > root->value)

else if (value < root->value) }

void preorder(node *& root)

cout << root->value << endl;

preorder(root->pleft);

preorder(root->pright);

}void turnlist(node * root,node * head ,node *tail)

node *p = root;

node *q = head;

while (!s.empty() || p != null)

if (!s.empty())

}tail->pleft = q;

}void converttodoublelist(node * node)

//遞迴轉鍊錶

void turnlistrecursive(node * root)

turnlistrecursive(root->pleft);

converttodoublelist(root);

turnlistrecursive(root->pright);

}void middleorder(node * root)

p = s.top();

s.pop();

cout << p->value << endl;

p = p->pright; }}

void preorderunrecursive(node * root)

p = s.top();

s.pop();

p = p->pright; }}

void postorder(node * root)

while (!s.empty() && s.top()->flag == 1) //把棧中所有的已訪問的節點全丟擲

if (!s.empty())

}}int _tmain(int argc, _tchar* argv)

p = tail->pleft;

while (p)

return 0;

}

微軟程式設計之美2015 第一題

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定兩個日期,計算這兩個日期之間有多少個2月29 日 包括起始日期 只有閏年有2月29 1.年份能被 4整除但不能被 100整除 2.年份能被 400整除 第一行為乙個整數t 表示資料組數。之後每組資料報含兩行。每一行格式為 m...

滴滴第一題

方法 先求字首和,將pair 字首和的值,字首和標號i 加入multimap中,搜尋每一種字首和的lowerbound和upbound,計算兩者之差,與字首和為零的標號比較,取最大值。include include include includeusing namespace std define ...

leetcode簡單題第一題python3

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1...