二叉樹常見面試題彙總(改進版)

2021-07-22 18:06:00 字數 2387 閱讀 6897

#include #include #include #include using namespace std;

struct treenode

;bool insert(treenode *&root,int val)//插入值

if (root->data == val) return false;

if (root->data < val)

insert(root->rson, val);

else insert(root->lson, val);

}void preorder(treenode *root)

}void display1(treenode *root)//非遞迴前序遍歷

if (!s.empty())

}}void inorder(treenode *root)

}void display2(treenode *root)//非遞迴中序遍歷

if (!s.empty())

}}void postorder(treenode *root)

}void display3(treenode *root)

if (!s.empty())

else

} }}

void display4(treenode* root)//廣度優先

}void display41(treenode *root)//按行列印

if (p->rson != null)

if (cost == 0)

}}bool hassubtree1(treenode *root1, treenode *root2)

bool hassubtree(treenode *root1, treenode *root2)//兩棵二叉樹a和b,判斷b是不是a的子結構

if (!result)

result = hassubtree(root1->lson,root2);

if (!result)

result = hassubtree(root1->rson, root2);

}return result;

}//二叉樹映象

void mirror(treenode *root)

//判斷是否對稱二叉樹

bool issymmetrical(treenode *root1, treenode *root2)

//二叉樹轉換為雙向鍊錶

void convertnode(treenode *root, treenode *&lastnode)

treenode* treetolist(treenode *root)

bool issymmetrical(treenode *root)

void findpath(treenode *root, int expectvalue, vector&path, int currentsum)

if (root->lson != null)

findpath(root->lson, expectvalue, path, currentsum);

if (root->rson != null)

findpath(root->rson, expectvalue, path, currentsum);

path.pop_back();

}void findpath(treenode *root, int expectvalue)//二叉樹中和為某個值的路徑

//二叉樹的深度

int treedeep(treenode *root)

//判斷是否為平衡樹

bool isbalanced(treenode *root, int &deep)

int left, right;

if (isbalanced(root->lson, left) && isbalanced(root->rson, right)) }

return false;

}bool isbalanced(treenode *root)//入口

//找到二叉搜尋樹第k個結點(find 和found兩個方法)

treenode* find(treenode *root, int &k)

if (target == null && root->rson != null)

target = find(root->rson, k);

return target;

}treenode *found(treenode *root, int &k)

if(ans==null)

ans=found(root->rson, k);

}return ans;

}void main()

system("pause");

}

常見的二叉樹面試題

面試中,最常見是資料結構就是二叉樹和鍊錶了,其中和二叉樹有關的常見面試題主要是 樹的前序遍歷 中序遍歷 後序遍歷 分層遍歷 樹的節點數 樹的葉子節點數 樹的第k層節點數 樹的深度 樹的寬度 平衡二叉樹的判定 完全二叉樹的判定 滿二叉樹的判定 由前序中序反推後序遍歷 由前序中序重建二叉樹,處理這些問題...

二叉樹面試題

1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...

面試題 二叉樹

面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...