A1102 反轉二叉樹

2022-05-02 04:57:10 字數 2650 閱讀 1370

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define i scanf

#define ol puts

#define o printf

#define f(a,b,c) for(a=b;a#define ff(a,b) for(a=0;a#define fg(a,b) for(a=b-1;a>=0;a--)

#define len 100

#define max 0x06ffffff

#define v vectorusing

namespace

std;

intused[len];

int cnt=0

;typedef

struct

node

node(

int d)

node(node *obj)

}}node;

typedef

struct

inputinfoinputinfo;

inputinfo infos[len];

node *nodes[len];

node * createnodes(int

index);

void inorder(node *node);

node *root;

void invert(node*node);

void levelorder(node*node);

string instr=""

;string levelstr=""

;int

main()

ff(i,n)

invert(root);

inorder(root);

levelorder(root);

puts(levelstr.substr(

0,levelstr.size()-1

).c_str());

puts(instr.substr(

0,instr.size()-1

).c_str());

return0;

}void levelorder(node*node)

}node * createnodes(int

index)

else

}if(f.r!="-"

)else

}nodes[index]=node;

return

node;

}void inorder(node *node)

}void invert(node*node)

view code

超簡單的一道題,居然寫了乙個小時,還寫了一百多行……明天一定要研究一下大佬們是怎麼寫的。

看了藍書之後才知道原來可以這麼寫。

1.靜態二叉樹資料結構,左右葉子結點直接用node陣列的下標記錄,空結點就記錄1(在結構體中直接初始化為1)

2.反轉二叉樹的操作實際上是後序遍歷

3.查詢根節點的方法:先把資料都記錄到node陣列中,在錄資料的時候記錄出現的葉子節點的id,讓isleaf[id]=0,這樣直接找到整棵樹都不是葉子的節點,就是根節點。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define i scanf

#define ol puts

#define o printf

#define f(a,b,c) for(a=b;a#define ff(a,b) for(a=0;a#define fg(a,b) for(a=b-1;a>=0;a--)

#define len 200

#define max 0x06ffffff

#define v vectorusing

namespace

std;

typedef

struct

nodenode;

node nodes[len];

intisleaf[len];

intn;

intcnt;

intgetroot()

}void buildtree(int i,char l,char

r)

if(r!='-'

)}void print(int

id)void invert(inti)}

void bfs(int

root)

}void inorder(inti)}

intmain()

int root=getroot();

invert(root);

bfs(root);ol(

"");

cnt=0;inorder(root);ol(""

);

return0;

}

LeetCode (二叉樹)反轉二叉樹

遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...

二叉樹反轉

二叉樹反轉,遞迴實現比較簡單,只需要交換父母節點的左右子節點就行,遞迴反轉左右子節點。homebrew作者面試google時解不出這道題而被拒,本文給出c實現的二叉樹反轉,包括前中後遍歷,二叉樹的建立等。反轉 如下 void inversebtree tnode root tnode tmp roo...

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...