#include #includeview code#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)
超簡單的一道題,居然寫了乙個小時,還寫了一百多行……明天一定要研究一下大佬們是怎麼寫的。
看了藍書之後才知道原來可以這麼寫。
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 ...