二叉樹相關面試題

2021-08-19 17:19:05 字數 2715 閱讀 9341

void treepreorderbyloop(treenode* root)

return;

}

void treeinorderbyloop(treenode* root)

//若cur為空,取棧頂元素,訪問,出棧

treenode* top = null;

int ret = gettop(&stack,&top);

if(ret == 0)

printf("%c ",top->data);

seqstackpop(&stack);

//讓cur指向棧頂元素的右子樹,重複迴圈判空過程

cur = top->rchild;

}return ;

}

void treepostorderbyloop(treenode* root)

//若cur為空,迴圈取棧頂元素

treenode* top = null;

int ret = gettop(&stack,&top);

if(ret == 0)

//對棧頂元素進行判定

//a.若top的rchild和訪問的上乙個元素是同一元素

//或top->rchild為空

//訪問棧頂元素,並出棧

if(top->rchild == null || top->rchild == pre)

//若不滿足上面的條件,cur指向top->rchild

else

}return;

}

遞迴版本:

void swap(treenode** a,treenode** b)

void treemirror(treenode* root)

非遞迴版本:

void treemirrorbyloop(treenode* root)

if(cur->rchild != null)

}return;

}

int iscompletetree(treenode* root)

else if(cur->lchild == null && cur->rchild != null)

//只有右子樹

return 0;

else if(cur->lchild != null && cur->rchild == null)

else

}else

}return 1;

}

size_t find(treenodetype array,size_t left,size_t right,treenodetype to_find)

}return (size_t)-1;

}treenode* _treerebuild(treenodetype pre_order,size_t pre_order_size,size_t* pre_order_index,

if(in_order_left >= in_order_right)

if(pre_order_index == null || *pre_order_index >= pre_order_size)

//根據先序遍歷結果取出當前值,基於該值構建乙個節點,new_node相當於當前子樹的根節點

treenode* new_node = createtreenode(pre_order[*pre_order_index]);

//查詢一下當前節點在中序序列中的位置

size_t cur_root_in_order_index = find(in_order,in_order_left,in_order_right,new_node->data

assert(cur_root_in_order_index != (size_t)-1);

++(*pre_order_index);

new_node->lchild = _treerebuild(pre_order,pre_order_size,pre_order_index,in_order,in_order

new_node->rchild = _treerebuild(pre_order,pre_order_size,pre_order_index,in_order,cur_root

return new_node;

}treenode* treerebuild(treenodetype pre_order,treenodetype in_order,size_t size)

測試函式:

int main()

void testinorderbyloop()

void testpostorderbyloop()

void testmirror()

void testmirrorbyloop()

void testiscompletetree()

void testrebuild()

int main()

結果演示:

二叉樹相關面試題

二叉樹的建立 1.求二叉樹節點個數 private static int count 0 public static void getsize node root count getsize root.left getsize root.right public static int getsize...

二叉樹的相關面試題

public class code01 dgmodel 先序遍歷 頭左右 public void preorderrecur node head system.out.println head.value preorderrecur head.left preorderrecur head.righ...

二叉樹面試題

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