二叉樹面試題(二) 求一顆二叉樹的映象

2021-07-30 20:53:00 字數 1282 閱讀 1567

一、二叉樹的映象就是乙個樹在鏡子裡的成像;好吧!初中的物理知識來了,哈哈,其實很簡單,採用遞迴的方法求二叉樹的映象:

(1)如果樹為空,直接返回null;

(2)如果樹不為空,求其左子樹和右子樹的映象,遞迴完成後,將左子樹的映象放在根結點的右邊,將右子樹的映象放在根結點的左邊;

二、圖說

三:**實現

#include

using

namespace

std;

#include

template

struct treenode

int _data;

treenode* _left;

treenode* _right;

};template

class binarytree

binarytree(const t* arr,int sz,const t invalid)//有參建構函式

void printf()//前序列印

void mirrorprintf()//列印二叉樹映象

protected:

node* buildtree(const t* arr,int sz,const t invalid,int& index)//前序建樹(別忘了index為引用)

return null;

}void _printf(node* root)

}node* _mirrorimage(node* root)//求一顆二叉樹的映象

else

//樹不為空

}private:

node* _root;

};

測試**:

void test()

; int sz1=sizeof(arr1)/sizeof(arr1[0]);

binarytree bt1(arr1,sz1,'#');//呼叫帶有引數的建構函式

cout

<

bt1.printf();

cout

<

bt1.mirrorprintf();

cout

四、執行結果

程式設計練習之一顆二叉樹包含另一顆二叉樹

劍指offer上的一道程式設計練習,如何確定二叉樹a包含一棵相對小一點的二叉樹b?思路 用兩個函式實現,第乙個首先判斷根結點是否相等,第二個函式繼續判斷子結構是否相等 函式一 第一步,首先從根結點入手,判斷proota的值是否與prootb的根結點的值是否相等。若相等,則在比較a樹的子結構是否包含b...

判斷一顆二叉樹是否是平衡二叉樹

方法一,參考 template typename t intdepthtree bstreenode pbs template typename t bool isbalancetree bstreenode pbs intdepthleft depthtree pbs left intdepthr...

判斷一顆二叉樹是否為對稱二叉樹

本題源自劍指offer 可以自定以一種對稱前序遍歷,即先遍歷父節點,再訪問右子節點,在訪問左子節點,null節點也訪問,將得到的序列和前序遍歷比較,相同就說明二叉樹是對稱的。遞迴 bool issymmetrical treenode proot bool issymmetricalcore tre...