二叉樹經典面試題

2021-08-23 12:21:58 字數 2629 閱讀 5125

二叉樹的結點型別如下:

typedef struct btnode

btnode, *binarytree;

1. 給你一顆普通的二叉樹,求二叉樹中最遠的兩個節點的距離分析:

1、如果具有最遠距離的兩個結點之間的路徑經過根結點,則最遠距離就是這個根節點左邊的深度加上根節點的右邊的深度。

2、如果具有最遠距離的兩個結點之間的路徑不經過根節點,則最遠距離的結點就在根節點的某一棵子樹上的兩個葉子結點。

使用distance記錄這個最遠的距離。後序遍歷二叉樹中每乙個結點,對於每乙個結點先算出左邊和右邊的深度和然後與distance裡面的資料進行比較,如果結果大於distance則更新distance的值。

int _getfardistance(btnode* root,int &distance)

return left>right?left+1:right+1;

}int getfartherdistance(btnode* root)

2. 由前序遍歷和中序遍歷重建二叉樹(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)前序遍歷的每一結點,都是當前子樹的根節點,我們可以根據前序遍歷的序列對中序遍歷的序列進行劃分。

}3. 判斷一棵樹是否是完全二叉樹我們可以根據完全二叉樹的定義,按照層序遍歷一顆樹,當遇到空結點時如果這棵樹已經遍歷完畢,則這棵樹就是完全二叉樹,如果遇到空結點的後面還有元素則這棵樹就不是完全二叉樹。

bool iscompletebinarytree(btnode* root)  //判斷一顆二叉樹是否是完全二叉樹

else

if (cur->_right)

else

}

方法2:

什麼是完全二叉樹呢???

如果一顆二叉樹的只有最後兩層結點的度能小於2,其餘結點的度都等於2。且最後一層的結點從最左邊依次排列。

思路:  若父節點不空,我們將二叉樹左右孩子依次放入佇列(空結點也放入佇列),依次出隊,遇到第乙個空結點,我們判斷後續佇列中的節點是否為空,若空,則是完全二叉樹。

bool is_comp_binarytree(btnode *ptr)

qu.push(p->leftchild);

qu.push(p->rightchild);

} while (!qu.empty())

return true;

}

4.後序和中序序列建立二叉樹 

int isindex(elemtype *is,elemtype x,int n)

s = buynode();

s->data = ls[n-1];

s->leftchild = createil(is,ls,pos);

s->rightchild = createil(is+pos+1,ls+pos,n-pos-1);

}return s;

}btnode * createtreeil(elemtype *is,elemtype *ls,int n)

else

}

5.求兩個節點的最近公共祖先分析:

求兩個結點的最近公共祖先有兩種情況。

1、如果這兩個結點不在一條線上,則它們就分別在最近的公共祖父的左右子樹上。

2、如果這兩個結點在一條線上,則它們之中深度最前的就是他們的最近的公共祖先。

思路:給定一棵二叉樹的頭節點root,以及這棵二叉樹的兩個節點node1和node2,請返回node1和node2的最近公共祖先節點。我們可以後序遍歷這棵樹,用left記錄左子樹返回的結果,用right記錄右子樹返回的結果。

雖然是三種情況,但是不論是哪一種,只要返回left和right中不為空的就可以了

btnode* _getancestor(btnode root,btnode node1,btnode node2)

btnode* getancestor(btnode* root, btnode* node1, btnode* node2)

二叉樹經典面試題

以下二叉樹的結點型別如下 templatet struct binarytreenode 求二叉樹中兩個節點的最近公共祖先 分析 求兩個結點的最近公共祖先有兩種情況。1 如果這兩個結點不在一條線上,則它們就分別在最近的公共祖父的左右子樹上。2 如果這兩個結點在一條線上,則它們之中深度最前的就是他們的...

經典二叉樹面試題

包括建立銷毀二叉樹,層序遍歷二叉樹,求二叉樹的葉子節點,求二叉樹第 k層的節點個數,求二叉樹的高度等 include include template struct binarytreenode template class binarytree 建構函式 binarytree const t a,...

二叉樹的經典面試題

二叉樹的基本操作 二叉樹的遍歷 前 中 後 層,遞迴 非遞迴 中用到的棧 中用到的佇列 面試題拷貝二叉樹 判斷一棵二叉樹是否是完全二叉樹 二叉樹的映象遞迴 二叉樹的映象非遞迴 求二叉樹中結點的個數 獲取二叉樹中葉子結點的個數 求二叉樹中k層結點的個數 求二叉樹的高度 查詢值為data的結點 判斷乙個...